如何使用具有多个条件SQL的选择插入变量

时间:2011-02-11 05:00:07

标签: sql-server sql-server-2008

如何使用具有多个条件的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,......

3 个答案:

答案 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) 
)