3

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

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

INSERT INTO data_table_name
EXECUTE(@SQLQuery), @SomeID

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

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

4

2 回答 2

3

您可以将查询结果存储在表变量中,然后使用额外的列从该变量中读取并写入最终表

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)
于 2012-11-09T19:14:19.797 回答
0

既然您提到您在存储过程中执行此操作,我建议您:

  1. 先执行@SQLQuery;
  2. 成功执行@SQLQuery 后,将@SQLQuery 插入到具有唯一ID 的表中。

IE

EXEC sp_executesql @SQLQuery, @Param 

IF @@ERROR <> 0
  BEGIN
    INSERT INTO TableA(Query)
    VALUES(@SQLQuery)
  END

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

于 2012-11-09T19:23:44.230 回答