动态生成用于变量定义的Sql和为表中的行赋值?

时间:2013-09-13 05:15:52

标签: sql-server sql-server-2008

例如,我有一张表

create table T (
    A int, 
    B numeric(10,3), 
    C nvarchar(10), 
    D datetime, 
    E varbinary(8)
)

更新:这只是示例表中的一个。任何表都可以用作生成SQL字符串的输入。

有没有一种简单的方法可以为一行动态生成以下Sql? (任何内置函数使引号,前缀更容易?)

'declare 
    @A int = 1, 
    @B numeric(10,3) = 0.01, 
    @C nvarchar(10) = N''abcd'', 
    @D = ''10/1/2013'', 
    @E = 0x9123'

2 个答案:

答案 0 :(得分:0)

不,没有。您可能获得的最接近但仍需要手动更改的方法是使用SQL Server Management Studio。展开数据库和表。

右键单击该表,然后选择Script table AsInsert To,然后选择新的查询窗口。这将生成输出,为您提供一个起点,但它不会生成变量。您必须自己编写脚本,或编辑生成的INSERT语句。

示例代码:

  

INSERT INTO MyDB]。[dbo]。[表1]              ([一个]              ,[B]              ,[C]

VALUES
       (<A, int,>
       ,<B, float,>
       ,<C, nvarchar(10),>
      )
     

GO

答案 1 :(得分:0)

不确定你想要实现的具体内容...没有内置函数用于这样的事情,但你可以尝试使用类似于这个的查询轻松创建一个......

select 'DECLARE @A int = ' + TableA.A + 
', @B numeric(10,3) = ' + TableA.B + 
', @C nvarchar(10) = N''' + TableA.C + 
''', @D = ''' + TableA.D + ''''
from TableA 
WHERE PrimaryKeyColumn = some_value

只需清理上面的查询并将其转换为返回nvarchar

的函数

如果你想动态生成表定义,那么你也必须使用系统视图为任何给定的表创建它。

尝试这样的事情并从这里开始工作

select T.name, C.name, TY.name, C.column_id
from sys.tables T
inner join sys.columns C on T.object_id = C.object_id
inner join sys.types TY on TY.system_type_id = C.system_type_id
where T.name = 'TableName'
order by C.column_id asc