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 语句不起作用的主要内容,如果未能解决你的问题,请参考以下文章