如何使用具有多个条件的select插入变量,假设一个函数返回一个临时表,我想填充其他表,但查询是做什么的
INSERT INTO @table (La, Lb, Qaa, Qab,Qbb)
SELECT items
FROM dbo.SOME_FUNCTION()
WHERE Condition for La
AND condition for Lb
AND condition for Qaa
AND condition for Qab
AND condition for Qbb...
嗯,我用一个答案做的代码看起来像这样:
Declare @table TABLE
(
La varchar(80),
Lb varchar(80),
Qaa varchar(80),
Qab varchar(80),
Qbb varchar(80)
)
INSERT INTO @table (La, Lb, Qaa, Qab,Qbb)
SELECT a.La,
a.Lb,
a.Qaa,
a.Qab,
a.Qbb
FROM dbo.function(@somevar) a
WHERE a.itemindex = 1
AND a.itemindex = 3
AND a.itemindex = 5
AND a.itemindex = 7
AND a.itemindex = 9
但是我收到了错误,
抱歉,我更正了但仍然收到错误
Msg 207, Level 16, State 1, Procedure NLQ_1, Line 189
Invalid column name 'La'.
为什么这是错的,所有列名La,Lb,Qaa,......
答案 0 :(得分:1)
在声明表格时,不要使用任何“as”关键字:
DECLARE @table TABLE
(
La varchar(80),
Lb varchar(80),
Qaa varchar(80),
Qab varchar(80),
Qbb varchar(80)
)
你的代码就是这样......
答案 1 :(得分:1)
首先,我认为错误消息是关于从函数(La
)中选择的a.La
,而不是关于插入的La
。
其次,WHERE过滤器存在问题:
WHERE a.itemindex = 1
AND a.itemindex = 3
AND a.itemindex = 5
AND a.itemindex = 7
AND a.itemindex = 9
它的解释如下:'[select rows] a.itemindex
等于1而同时等于3,同样等于5,依此类推。 “你理所当然地认为它永远不会成真。
您可能正在考虑将条件应用于所有行一般:'让我这些行和这些和这些...... '。但您应该将条件视为应用于每个单行。考虑一下:'选择a.itemindex
等于1 或的每一行,它等于3 或到5等等。这样你就会想出一个正确的过滤条件,特别是:
WHERE a.itemindex = 1
OR a.itemindex = 3
OR a.itemindex = 5
OR a.itemindex = 7
OR a.itemindex = 9
但你可以进一步简化它。你喜欢这样的方式:'a.itemindex
是以下之一:1,3,5,7,9'? SQL也有一个布尔运算,它被称为IN
('在这个列表中:')。这就是你最终会得到的:
WHERE a.itemindex IN (1, 3, 5, 7, 9)
奇妙,不是吗?
答案 2 :(得分:0)
如果我理解正确,你需要尝试像
这样的东西INSERT INTO @table (col1, col2, col3, col4, col5)
SELECT a.col1,
a.col2,
a.col3,
a.col4,
a.col5
FROM dbo.Your_Function() a
WHERE a.colx = condition1
AND a.coly = condition2
AND a.colz = condition3
WHERE逻辑将用于对照函数的结果,您需要指定要插入和插入的列。
修改强>
将变量表声明为
Declare @table TABLE (
La varchar(80),
Lb varchar(80),
Qaa varchar(80),
Qab varchar(80),
Qbb varchar(80)
)