IF EXISTS SQL 语句不起作用

Posted

技术标签:

【中文标题】IF EXISTS SQL 语句不起作用【英文标题】:IF EXISTS SQL Statement won't work 【发布时间】:2016-07-18 12:48:59 【问题描述】:

我从以下 T-SQL 查询中收到此错误。

错误信息:

消息 102,级别 15,状态 1,第 13 行 '101' 附近的语法不正确

谁能发现这里的错误在哪里?使用 Management Studio / SQLServerExpress 所需的结果是插入新记录或更新现有记录。

以下是我的查询:

IF EXISTS (SELECT * FROM Product WHERE ProductID = 101) 
UPDATE Product SET  
ProductID = 101 , InsurerID = 1, CategoryID =1, Name = 'Landlord',
[description] ='Allianz Landlord', label = 'NULL', AssumptionRef  ='NULL',
QuoteProviderKey ='A75',AccidentalDamageCover =0, ProductBenefitGroupID = 11,
IsAvailableToBuy =1,IsAvalableToDisplay =0,PercentageContentsCover ='NULL', 
ProductPolicyView ='NULL', ProductFee =NULL 
WHERE ProductID = 101 
ELSE 
INSERT INTO Product 
VALUES 101,1,1,'Landlord','Allianz Landlord','NULL','NULL','A75',0,11,1,0,'NULL','NULL',NULL
WHERE ProductID  = 101

【问题讨论】:

你分别测试了调用的组成部分吗? 您在INSERT 语句的末尾有一个WHERE ProductID = 101。还可以在VALUES 周围添加 () 像这样VALUES(101,....... ) 将括号添加到 VALUES (...) 简单的错字,应该关闭 您没有提及您使用的是哪个版本的 SQL Server,但对于 SQL Server 2008 及更高版本,您应该考虑使用 MERGE 而不是 IF EXISTS。后者在高并发环境中可能会失败。 【参考方案1】:

您的INSERT 语句有一个带有VALUES 集的WHERE 子句,这是无效的:

INSERT INTO Product
VALUES 101
    ,1
    ,1
    ,'Landlord'
    ,'Allianz Landlord'
    ,'NULL'
    ,'NULL'
    ,'A75'
    ,0
    ,11
    ,1
    ,0
    ,'NULL'
    ,'NULL'
    ,NULL
WHERE ProductID = 101

您还缺少VALUES 部分周围的(),以及列出的列(虽然这不会产生错误,但您应该养成明确列出列的习惯)

你的陈述应该是这样的:

INSERT INTO Product
(
    ProductID
    ,InsurerID
    ,CategoryID
    ,NAME
    ,[description]
    ,label 
    ,AssumptionRef 
    ,QuoteProviderKey 
    ,AccidentalDamageCover 
    ,ProductBenefitGroupID 
    ,IsAvailableToBuy 
    ,IsAvalableToDisplay 
    ,PercentageContentsCover 
    ,ProductPolicyView 
    ,ProductFee 
)
VALUES 
(
    101
    ,1
    ,1
    ,'Landlord'
    ,'Allianz Landlord'
    ,'NULL'
    ,'NULL'
    ,'A75'
    ,0
    ,11
    ,1
    ,0
    ,'NULL'
    ,'NULL'
    ,NULL
)

另一个问题是你为什么使用字符串'NULL' 值。如果您打算将这些字段设置为 NULL,则它们应该是 NULL 而不是 'NULL'

【讨论】:

谢谢我的朋友,非常感谢。【参考方案2】:

替换最后一个 where 子句,因为根据您的场景,您不需要在 INSERT 语句中使用 where 尝试运行这个

IF EXISTS (SELECT * FROM Product WHERE ProductID = 101)  UPDATE Product SET   ProductID = 101 , InsurerID = 1, CategoryID =1, Name = 'Landlord', [description] ='Allianz Landlord', label = 'NULL', AssumptionRef  ='NULL', QuoteProviderKey ='A75',AccidentalDamageCover
=0, ProductBenefitGroupID = 11, IsAvailableToBuy =1,IsAvalableToDisplay =0,PercentageContentsCover ='NULL',  ProductPolicyView ='NULL', ProductFee =NULL  WHERE ProductID = 101  ELSE  INSERT INTO Product  VALUES 101,1,1,'Landlord','Allianz Landlord','NULL','NULL','A75',0,11,1,0,'NULL','NULL',NULL

【讨论】:

【参考方案3】:

你忘了开头结尾

IF (.....)
BEGIN

END
ELSE
BEGIN

END

【讨论】:

如果块中只有 1 条语句,您可以跳过 BEGIN ... END。该错误是由另一个错误引起的。

以上是关于IF EXISTS SQL 语句不起作用的主要内容,如果未能解决你的问题,请参考以下文章

非常基本的 IF EXISTS 语句不起作用

pandas DataFrame.to_sql() 函数 if_exists 参数不起作用

QT:QFileInfo().exists() 不起作用

函数 file_exists 不起作用

PHP file_exists 不起作用。似乎在颠倒真假

为啥这个 if 语句在这种情况下不起作用? [关闭]