我想将select语句的结果放入@variable中,以便稍后在查询中使用。我不知道会有多少结果。 我试过了;
SET @variable = SELECT column FROM table
RESULT
@variable=( 123213,321312,321321)
我想将结果用作
UPDATE table SET column=1 WHERE column in @variable
答案 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