如何在SQL中的IF EXISTS中使用AND条件?

use*_*433 24 sql sql-server if-statement

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'X' AND COLUMN_NAME = 'Y') 

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Z' AND COLUMN_NAME = 'A')
BEGIN
    UPDATE [dbo].[X] 
        SET Y= (SELECT inst.[A] FROM [dbo].[Z] s WHERE s.[B] = [dbo].[x].[B]);
END    
    GO
Run Code Online (Sandbox Code Playgroud)

我希望结合2个IF混淆并仅在满足它们时才执行更新.我有什么方法可以参加2 IF EXISTS吗?

Vla*_* G. 52

简单:

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'X' AND COLUMN_NAME = 'Y') 
AND EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Z' AND COLUMN_NAME = 'A')

BEGIN
    UPDATE [dbo].[X] 
        SET Y= (SELECT inst.[A] FROM [dbo].[Z] s WHERE s.[B] = [dbo].[x].[B]);
END    
GO
Run Code Online (Sandbox Code Playgroud)

  • 此外,您应该在INFORMATION_SCHEMA.COLUMNS查询中包含TABLE_SCHEMA,否则如果在不同的模式中存在相同的表名,则会得到错误的结果. (2认同)

Mud*_*san 6

不需要通过SELECT*选择所有列.因为您正在检查是否存在行,所以请执行SELECT 1以更快地进行查询.

IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
              WHERE TABLE_NAME = 'X' AND COLUMN_NAME = 'Y')

IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS 
          WHERE  TABLE_NAME = 'Z' AND COLUMN_NAME = 'A')

    BEGIN
        UPDATE [dbo].[X] 
            SET Y= (SELECT inst.[A] FROM [dbo].[Z] s WHERE s.[B] = [dbo].[x].[B]);
    END    
        GO
Run Code Online (Sandbox Code Playgroud)