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) 

原因是我有一个来自多个表的相对复杂的查询,我不想重复这段代码,一次用于插入,第二次用于更新。

4

4 回答 4

0

您可以使用表变量。

就像是

DECLARE @Table TABLE(
Col1 INT
)

INSERT INTO @Table
SELECT Col1
FROM Table

看一下

T-SQL 中的表变量

声明 @local_variable (Transact-SQL)

于 2012-08-31T04:26:38.407 回答
0

只需使用一个临时表就可以了:

从某处 WHERE 选择一些东西到#temporary_table blabla

于 2012-08-31T08:20:36.103 回答
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 回答
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 回答