首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Sql if语句一个接一个的if检查

Sql if语句一个接一个的if检查
EN

Stack Overflow用户
提问于 2013-08-28 06:54:10
回答 3查看 89关注 0票数 2

我正在使用。

代码语言:javascript
运行
复制
IF EXISTS (
    SELECT *
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = 'ServerSettings'
        AND COLUMN_NAME = 'MapIsAlwayCalcLenByWebServices'
)
    IF (
        SELECT MapIsAlwayCalcLenByWebServices
        FROM ServerSettings
    ) = 0
        UPDATE ServerSettings
        SET MapCalculateDistanceSource = 0

有谁知道为什么这段代码会抛出错误“无效列名”。我认为只有当第一个if为真时,第二个选择才会执行。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-28 06:57:29

不,首先编译整个批处理,然后开始执行。由于它不能编译批处理,因为您引用了无效的列,所以它从不执行if语句。

您需要保护引用EXEC中可能缺失的列的代码,如下所示:

代码语言:javascript
运行
复制
if exists(select * from INFORMATION_SCHEMA.COLUMNS 
          where TABLE_NAME = 'ServerSettings' and
                COLUMN_NAME = 'MapIsAlwayCalcLenByWebServices')
begin
    exec('UPDATE ServerSettings SET MapCalculateDistanceSource = 0
          WHERE MapIsAlwayCalcLenByWebServices = 0')
end
票数 7
EN

Stack Overflow用户

发布于 2013-08-28 06:58:02

试试这个-

代码语言:javascript
运行
复制
IF EXISTS(
    SELECT 1 
    FROM sys.columns c 
    WHERE c.name = 'MapIsAlwayCalcLenByWebServices'
        AND c.[object_id] = OBJECT_ID('dbo.ServerSettings')
) BEGIN

        EXEC sys.sp_executesql '
        UPDATE dbo.ServerSettings
        SET MapCalculateDistanceSource = 0
        WHERE MapIsAlwayCalcLenByWebServices = 0'

END
票数 3
EN

Stack Overflow用户

发布于 2013-08-28 07:42:36

检查现有列的另一种方法

代码语言:javascript
运行
复制
IF COL_LENGTH('dbo.ServerSettings', 'MapIsAlwayCalcLenByWebServices') IS NOT NULL
EXEC ('UPDATE dbo.ServerSettings
       SET MapCalculateDistanceSource = 0
       WHERE MapIsAlwayCalcLenByWebServices = 0')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18481191

复制
相关文章

相似问题

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