我正在编写一个动态创建SQL字符串@SQLQuery的存储过程。创建此查询后,我需要执行查询并将其插入数据库中的表,同时添加另一列,指定此特定插入的唯一ID。 (上下文:在此应用程序中可能会将多个数据分组插入此表中,并且我需要能够在以后的分组之间区分。)
此问题与此question类似,只是我使用的是Microsoft SQL Server 2008而不是mysql。我在那里尝试了解决方案:
INSERT INTO data_table_name
EXECUTE(@SQLQuery), @SomeID
但MS SQL Server 2008不喜欢这种语法。
有关如何在SQL Server 2008中执行此操作的任何想法?
答案 0 :(得分:2)
您可以将查询结果存储在表变量中,然后从具有额外列的内容中读取并写入最终表
DECLARE @temp table (col1 int, col2 varchar(10), ....)
INSERT INTO @temp
EXEC(@SQLQuery)
INSERT INTO data_table_name
SELECT *, @SomeID FROM @temp
您还可以在动态sql字符串中附加@SomeID。
示例:
SET @SQLQuery = 'SELECT *,' + @SomeID + ' FROM ' + @tableNameVar
然后执行此操作
INSERT INTO data_table_name
EXECUTE(@SQLQuery)
答案 1 :(得分:0)
由于您提到您在存储过程中执行此操作,我建议您使用:
即
EXEC sp_executesql @SQLQuery, @Param
IF @@ERROR <> 0
BEGIN
INSERT INTO TableA(Query)
VALUES(@SQLQuery)
END
最好设计TableA,以便ID成为Identity,以便在将记录插入该表时生成唯一的顺序ID。