我需要使用列定义动态创建 INSERT INTO 语句,以防止出现 IDENTITY_INSERT 问题。我已经找到了如何检索表的列列表以及将它们放在一起的方法。
DECLARE @Query nvarchar(4000)
DECLARE @columnlist nvarchar(4000)
// Result of this query e.g.: "[cid], [pid], [nid], [uid], [subject]"
SET @columnlist = (SELECT SUBSTRING((SELECT ', ' + QUOTENAME(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'from_table' ORDER BY ORDINAL_POSITION FOR XML path('')), 3, 200000))
SET @query ='INSERT INTO to_table (' + @columnlist + ') SELECT ' + @columnlist + ' FROM from_table;'
exec sp_executesql @query
无论如何,我对这个解决方案感到不舒服,因为我正在构建一个字符串,然后执行。我正在寻找一个直接执行的带有查询的解决方案。有什么建议么?