3

SQL 文字列 @SQLQuery を動的に作成するストアド プロシージャを作成しています。このクエリを作成したら、クエリを実行してデータベースのテーブルに挿入し、この特定の挿入の一意の ID を指定する別の列を追加する必要があります。(コンテキスト: このアプリケーションでは、データの複数のグループがこのテーブルに挿入される可能性があり、後でグループを区別できるようにする必要があります。)

この問題は、mysql の代わりに Microsoft SQL Server 2008 を使用していることを除いて、この質問と似ています。そこで解決策を試しました:

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が正常に実行されたら、一意のIDを持つテーブルに@SQLQueryを挿入します。

すなわち

EXEC sp_executesql @SQLQuery, @Param 

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

IDがIDになるようにTableAを設計して、そのテーブルにレコードを挿入したときに一意のシーケンシャルIDが生成されるようにすることをお勧めします。

于 2012-11-09T19:23:44.230 に答える