我正在编写一个存储过程,该过程动态创建SQL String,@sqlquery。创建此查询后,我需要执行查询并将其插入数据库中的表中,同时添加另一列为此特定插入指定唯一ID。(上下文:在此应用程序中,可能将多个数据分组插入该表,我需要能够在以后的分组之间进行区分。)
此问题类似于此问题,除了我使用的是Microsoft SQL Server 2008而不是MySQL。我在那里尝试了解决方案:
INSERT INTO data_table_name
EXECUTE(@SQLQuery), @SomeID
但是MS SQL Server 2008不喜欢该语法。
在SQL Server 2008中如何执行此操作的任何想法?
您可以将查询结果存储在表变量中,然后用额外的列从中读取并写入最终表
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)
,由于您提到的是在存储过程中这样做,所以我建议您:
- 首先执行@sqlquery;
- 成功执行@sqlquery后,将@sqlquery插入具有唯一ID的表格。
即。
EXEC sp_executesql @SQLQuery, @Param
IF @@ERROR <> 0
BEGIN
INSERT INTO TableA(Query)
VALUES(@SQLQuery)
END
您最好设计tablea,以使ID是一个身份,以便在将记录插入该表时会生成唯一的顺序ID。