例如,我有一张表
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'
答案 0 :(得分:0)
不,没有。您可能获得的最接近但仍需要手动更改的方法是使用SQL Server Management Studio。展开数据库和表。
右键单击该表,然后选择Script table As
,Insert 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