2012-11-09 11 views
3

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

此问题类似于此question,但我是使用Microsoft SQL Server 2008而不是mysql。我试过那里的解决方案:

INSERT INTO data_table_name 
EXECUTE(@SQLQuery), @SomeID 

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

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

回答

2

您可以将查询结果表变量,然后从该额外列读取和写入到决赛桌

DECLARE @temp table (col1 int, col2 varchar(10), ....) 

INSERT INTO @temp 
EXEC(@SQLQuery) 

INSERT INTO data_table_name 
SELECT *, @SomeID FROM @temp 

您还可以追加@SomeID在动态SQL字符串。

例子:

SET @SQLQuery = 'SELECT *,' + @SomeID + ' FROM ' + @tableNameVar 

,然后做这个

INSERT INTO data_table_name 
EXECUTE(@SQLQuery) 
+0

我的答案比我甚至可以接受答案还要快。真棒。这工作完美。谢谢! – Brandon

+0

YW,请15分钟后回复并接受答案! –

0

既然你提到你在存储过程中这样做,我的建议是你:

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

EXEC sp_executesql @SQLQuery, @Param 

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

你最好TableA的设计,使得这样,当你插入一条记录到该表中生成一个唯一的顺序号的编号将是一个身份。

+0

他希望为查询返回的值设置单个id值。 –