在添加额外列时将execute(@QueryString)的结果插入表中

时间:2012-11-09 19:11:46

标签: sql sql-server

我正在编写一个动态创建SQL字符串@SQLQuery的存储过程。创建此查询后,我需要执行查询并将其插入数据库中的表,同时添加另一列,指定此特定插入的唯一ID。 (上下文:在此应用程序中可能会将多个数据分组插入此表中,并且我需要能够在以后的分组之间区分。)

此问题与此question类似,只是我使用的是Microsoft SQL Server 2008而不是mysql。我在那里尝试了解决方案:

INSERT INTO data_table_name
EXECUTE(@SQLQuery), @SomeID

但MS SQL Server 2008不喜欢这种语法。

有关如何在SQL Server 2008中执行此操作的任何想法?

2 个答案:

答案 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)

由于您提到您在存储过程中执行此操作,我建议您使用:

  1. 首先执行@SQLQuery;
  2. 成功执行@SQLQuery后,将@SQLQuery插入到具有唯一ID的表中。
  3. EXEC sp_executesql @SQLQuery, @Param 
    
    IF @@ERROR <> 0
      BEGIN
        INSERT INTO TableA(Query)
        VALUES(@SQLQuery)
      END
    

    最好设计TableA,以便ID成为Identity,以便在将记录插入该表时生成唯一的顺序ID。