首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用select和多个条件插入变量SQL Server

如何使用select和多个条件插入变量SQL Server
EN

Stack Overflow用户
提问于 2011-02-11 13:00:07
回答 3查看 3.2K关注 0票数 1

如何使用带有多个条件的select插入变量,假设一个函数返回一个临时表,并且我想填充其他表,但是执行以下操作的查询是什么呢

代码语言:javascript
复制
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...

好吧,我用一个答案做的代码看起来像这样:

代码语言:javascript
复制
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 

但我得到了一个错误,

抱歉,我已更正,但仍收到错误

代码语言:javascript
复制
Msg 207, Level 16, State 1, Procedure NLQ_1, Line 189
Invalid column name 'La'.

为什么会错,所有的列名都是La,Lb,Qaa,..。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-11 15:30:31

首先,我认为错误消息是关于从函数(a.La)中选择的La,而不是关于正在插入的La

其次,WHERE过滤器有一个问题:

代码语言:javascript
复制
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的每一行,依此类推。”这样,您就可以得到一个正确的过滤条件,具体如下:

代码语言:javascript
复制
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:')。这是你最终会得到的:

代码语言:javascript
复制
WHERE   a.itemindex IN (1, 3, 5, 7, 9)

太棒了,不是吗?

票数 1
EN

Stack Overflow用户

发布于 2011-02-11 13:36:43

当声明一个表时,不要使用任何"as“关键字:

代码语言:javascript
复制
DECLARE @table TABLE
(
    La   varchar(80),
    Lb   varchar(80),
    Qaa  varchar(80),
    Qab  varchar(80),
    Qbb  varchar(80)
)

这就是你的代码的问题所在。

票数 1
EN

Stack Overflow用户

发布于 2011-02-11 13:22:01

好吧,如果我没理解错的话,你需要尝试像这样

代码语言:javascript
复制
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逻辑将针对函数的结果使用,您需要指定希望插入到和来自的列。

编辑:

将变量表声明为

代码语言:javascript
复制
Declare @table TABLE (     
    La    varchar(80),     
    Lb    varchar(80),     
    Qaa   varchar(80),     
    Qab   varchar(80),     
    Qbb   varchar(80) 
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4965768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档