1

SELECT後続のINSERT/UPDATEクエリの結果を使用できるカーソルを使用する以外の方法はありますか?

何かのようなもの:

DECLARE @SELECTRESULT;

SELECT Something into @SELECTRESULT
FROM Somewhere

INSERT INTO SomewhereElse (X, XX, XXX)
SELECT Something, GETDATE(), 'XXX'
FROM @SELECTRESULT

UPDATE Somewhere
Set SomethingElse = 'ABC'
WHERE
Something in
(SELECT Something FROM @SELECTRESULT) 

その理由は、複数のテーブルからの比較的複雑なクエリがあり、このコードを複製したくないためです。1 回は挿入用、2 回目は更新用です。

4

4 に答える 4

0

一時テーブルを使用するだけで問題ありません。

#temporary_table FROM Somewhere WHERE blabla に何かを選択

于 2012-08-31T08:20:36.103 に答える
0

テーブル変数を使用できます。

何かのようなもの

DECLARE @Table TABLE(
Col1 INT
)

INSERT INTO @Table
SELECT Col1
FROM Table

見て

T-SQL のテーブル変数

DECLARE @local_variable (Transact-SQL)

于 2012-08-31T04:26:38.407 に答える
0
DECLARE @SELECTRESULT table(Something nvarchar(50)) --the data that you could reuse.
insert into @SELECTRESULT(Something)
SELECT Something
FROM Somewhere

INSERT INTO SomewhereElse (X, XX, XXX)
SELECT Something, GETDATE(), 'XXX'
FROM @SELECTRESULT

UPDATE Somewhere
Set SomethingElse = 'ABC'
WHERE Something in
(SELECT Something FROM @SELECTRESULT)
于 2012-08-31T17:48:38.853 に答える
0

一時テーブルを使用します。

CREATE TABLE #tempTable
(
Something int NOT NULL,
CurrentDate DateTime NULL,
    XXX Varchar(50)
)

次に、複数のテーブルに対して複雑なクエリを使用し、結果セットを tempTable に挿入します。

Insert into #tempTable
-- Complex Select Query

選択したクエリによって返される列が #tempTable 構造の順序で一致していることを確認してください。また、列の数も一致する必要があります。複雑なデータを含む #tempTable を取得したら、それを挿入および更新クエリに複数回使用できます。

INSERT INTO SomewhereElse (X, XX, XXX)
SELECT * from #tempTable

UPDATE Somewhere
Set SomethingElse = 'ABC'
WHERE
Something in (SELECT Something FROM #tempTable) 
于 2012-08-31T15:33:19.290 に答える