-1

例如,我有一张桌子

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'
4

2 回答 2

0

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

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

示例代码:

插入 MyDB].[dbo].[Table1] ([A] ,[B] ,[C]

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

于 2013-09-13T05:25:05.090 回答
0

不确定您具体要达到什么目的……没有类似的内置函数,但您可以尝试使用类似于此的查询轻松创建一个……</p>

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 
于 2013-09-13T10:41:56.217 回答