1。如何根据表结构生成SQL语句??
2。如何获取一个字段的所有属性、约束???
create procedure up_getTableStruct
@v_tableName varchar(256)
as
declare @i_objectId int, -- 對象id
@i_indId smallint, -- 索引id
@v_pkInfo varchar(100), -- 主鍵信息
@v_clusteredInfo varchar(20), -- clustered信息
@v_pkCol varchar(100), -- 主鍵字段
@v_key varchar(50),
@i_i smallint
set @i_objectId = object_id(@v_tableName)
if @i_objectId is null -- 判斷對象是否存在
begin
print The object not exists
return
end
if OBJECTPROPERTY(@i_objectId,IsTable) <> 1 -- 判斷對象是否是table
begin
print The object is not table
return
end
create table #temp1
(
i_id int identity,
v_desc varchar(200)
)
insert into #temp1(v_desc)
values(create table +@v_tableName+() --
insert into #temp1(v_desc) -- 將表的字段信息存入臨時表
select a.name+space(4)+b.name+
case when b.xtype in (167,175,231,239) then (+cast(a.length as varchar)+)
when b.xtype in (106,108) then (+cast(a.xprec as varchar)+,+cast(a.xscale as varchar)+)
else end+space(4)+
case when (a.colstat & 1 = 1) then identity(+cast(ident_seed(@v_tableName) as varchar)+, +
cast(ident_incr(@v_tableName) as varchar)+) else end +space(4)+
case a.isnullable when 0 then not null else null end+|
from syscolumns a,systypes b
where a.id = @i_objectId and a.xtype = b.xusertype
order by a.colid
create procedure 名
@aa varchar(10)
as
begin
select a.id 编号,a.name 名称,b.id,b.name from table1 a join table2 b on a.id=b.id where
end
if exists(select 1 from sysobjects where parent_obj = @i_objectId and xtype = PK) -- 如果存在主鍵
begin
select @v_pkInfo = b.name,@i_indId = indid, -- 得到主鍵名,id及是否clustered信息
@v_clusteredInfo = (case when (a.status & 16)=16 then clustered else nonclustered end )
from sysindexes a,sysobjects b
where a.id = b.parent_obj and a.name = b.name and b.xtype = PK and b.parent_obj = @i_objectId
select @v_pkCol = index_col(@v_tableName, @i_indId, 1), @i_i = 2 -- 得到主鍵的第1個字段名
select @v_key = index_col(@v_tableName, @i_indId, @i_i) -- 得到主鍵的第2個字段名
while (@v_key is not null)
begin
select @v_pkCol = @v_pkCol + , + @v_key, @i_i = @i_i + 1
select @v_key = index_col(@v_tableName, @i_indId, @i_i) -- 得到主鍵的第@i_i個字段名
end -- 組合成主鍵信息
set @v_pkInfo = constraint +@v_pkInfo+ primary key +@v_clusteredInfo+(+@v_pkCol+)
insert into #temp1(v_desc) values(@v_pkInfo) -- 將主鍵信息插入臨時表
end
else
begin
select @i_i = count(1) from #temp1
-- 如果沒有主鍵,那麼將最後一筆紀錄的|去掉
update #temp1 set v_desc = replace(v_desc,|,) where i_id = @i_i
end
insert into #temp1(v_desc) values()) --
update #temp1 set v_desc = replace(v_desc,|,,)
select v_desc from #temp1 order by i_id
drop table #temp1