如果SQL中存在,如何使用和条件?

如果SQL中存在,如何使用和条件?,sql,sql-server,if-statement,Sql,Sql Server,If Statement,我想合并2个IF配置,并仅在两个配置都满足时执行更新。如果存在club 2,是否有其他方法可以使用?简单: 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')

我想合并2个IF配置,并仅在两个配置都满足时执行更新。如果存在club 2,是否有其他方法可以使用?

简单:

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

无需通过执行select*选择所有列。因为要检查行的存在性,所以请选择1以加快查询速度

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

将标题和说明更改为空

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

或者,实际上看一下你的代码,它会像写的一样工作——第二个IF嵌套在第一个IF之下。只需添加选项卡:另外,您应该在信息\u SCHEMA.COLUMNS查询中包含表\u SCHEMA,否则如果在不同的模式中存在相同的表名,您将得到错误的结果。G,如果列a或列Y不存在或被删除,该怎么办?在那种情况下我犯了一个错误。Msg 207,级别16,状态1,第5行列名“A”无效。user811433:如果表存在,则SQL Server将尝试绑定该语句,即解析所有对象和列引用。如果列不存在,则会出现错误。在这种情况下,您需要执行动态SQL:EXEC'UPDATE[dbo].[X]SET Y=SELECT inst[A]FROM[dbo].[Z]s,其中s[B]=[dbo].[X].[B];'当我尝试像上面那样的动态SQL时,我或多或少看到了与以前相同的错误。无法绑定多部分标识符s.A。您永远无法从查询中获取记录,除非表_名称可以同时为“X”和“Z”。对列名称重复此操作。另外,由于要检查行的存在性,所以请选择1以加快查询速度。SQL Server比这更聪明。不,如果X.Y或Z.A存在,则更新将运行,而不是两者都存在。关于性能,据我所知,仅在生成查询计划时验证现有查询的选择列表,但不会影响执行。查询优化器只是构建一个计划,测试是否存在满足指定要求的行。对于具有缓存计划的存储过程,不必担心。虽然我个人的偏好是选择42,但您会发现1/0或NULL也同样适用。即使是30/-3/5(通常会导致被零除的错误)也可以工作。
UPDATE `li_categories`
  SET description = CASE
    WHEN description = '' THEN CONCAT('optional text ', title, ' optional text')
    ELSE description
    END
WHERE
 id