如何使用带有多个条件的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,..。
发布于 2011-02-11 15:30:31
首先,我认为错误消息是关于从函数(a.La)中选择的La,而不是关于正在插入的La。
其次,WHERE过滤器有一个问题:
WHERE a.itemindex = 1
AND a.itemindex = 3
AND a.itemindex = 5
AND a.itemindex = 7
AND a.itemindex = 9 它是这样解释的:“选择a.itemindex等于1,同时又等于3,同样等于5的行,依此类推。”你会理所当然地认为这永远不会是真的。
您可能在考虑通常应用于所有行的条件:“给我这些行,这些和这些……”。相反,您应该考虑应用于每一行的条件。考虑这样的情况:“选择a.itemindex等于1或 it等于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 ('IN this list:')。这是你最终会得到的:
WHERE a.itemindex IN (1, 3, 5, 7, 9)太棒了,不是吗?
发布于 2011-02-11 13:36:43
当声明一个表时,不要使用任何"as“关键字:
DECLARE @table TABLE
(
La varchar(80),
Lb varchar(80),
Qaa varchar(80),
Qab varchar(80),
Qbb varchar(80)
)这就是你的代码的问题所在。
发布于 2011-02-11 13:22:01
好吧,如果我没理解错的话,你需要尝试像这样
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 = condition3WHERE逻辑将针对函数的结果使用,您需要指定希望插入到和来自的列。
编辑:
将变量表声明为
Declare @table TABLE (
La varchar(80),
Lb varchar(80),
Qaa varchar(80),
Qab varchar(80),
Qbb varchar(80)
)https://stackoverflow.com/questions/4965768
复制相似问题