存储查询结果,将多个结果作为列表变量以便稍后使用

时间:2016-12-09 12:00:55

标签: sql sql-server

我想将select语句的结果放入@variable中,以便稍后在查询中使用。我不知道会有多少结果。 我试过了;

SET @variable = SELECT column FROM table

RESULT

@variable=( 123213,321312,321321)

我想将结果用作

UPDATE table SET column=1 WHERE column in @variable

3 个答案:

答案 0 :(得分:4)

只需使用临时表:

SELECT column
INTO #tmp
FROM table;


UPDATE table
    SET column = 1
    WHERE column in (SELECT column FROM #tmp);

您也可以使用表变量,但需要指定列的类型来定义变量。

答案 1 :(得分:3)

如果您真的希望它以变量的形式出现(仅在执行时可用),那么您可以声明TABLE变量。

DECLARE @variable TABLE (Column1 INT);
INSERT INTO @variable
SELECT Column FROM Table

更好的方法是使用SELECT INTO

创建临时表
SELECT Column
INTO #variable
FROM table;

您可以在任何查询中将@variable#variable用作常规表。

UPDATE table
SET Column = 1
WHERE column IN (SELECT COLUMN FROM @variable)

or

UPDATE table
SET Column = 1
WHERE column IN (SELECT COLUMN FROM #variable)

虽然我更喜欢/推荐JOIN风格:

UPDATE t
SET column = 1
FROM table t
    INNER JOIN #variable v on t.column = v.column

我不推荐使用表格变量的原因有很多,但其中一个最重要的原因是效果

在从表变量读取数据时,查询优化器将始终生成1的估计值,这将为@variable具有大量行的方案生成不太理想的执行计划。

答案 2 :(得分:1)

如果您要处理多个值,那么您应该使用TABLE VARIABLE

像.......

这样的东西
Declare @t TABLE (Value INT)

INSERT INTO @t (Value)
SELECT column FROM table

现在在您的更新中使用此Table变量,类似于.....

UPDATE table 
 SET column=1 
WHERE column in (Select Value from @t)

但是为什么你只是在更新记录时只是直接从表中选择,为什么你甚至需要把它放到任何类型的变量中

   UPDATE table 
     SET column=1 
    WHERE column in (SELECT column FROM table)

或者更好的方法就是.....

   UPDATE t1 
     SET t1.column=1 
   FROM table1 t1 
   INNER JOIN Table2 ON t1.Column = t2.column