在 if ... then 中使用插入语句 (SQL)
Posted
技术标签:
【中文标题】在 if ... then 中使用插入语句 (SQL)【英文标题】:Using an insert statement in an if ... then (SQL) 【发布时间】:2018-06-29 14:30:44 【问题描述】:(使用 SQL Server 2008R2) 我在一个永远不会同时包含数据的表中的记录中有 2 个值。我想在 2 个联结表中的 1 个中插入一条记录,具体取决于哪个字段有数据。
SELECT @val1 = [propVal1ID]
,@val2 = [propVal2ID]
FROM [proposalPackage]
WHERE [proposalPackageID] = @proposal
IF @val1 > 0
INSERT INTO [jTable1]
([projectID]
,[value1_ID]
,[subValue1_ID]
,[priority]
,[isActive])
SELECT
@project as projectID
,@val1 as [value1_ID]
,[subValue1ID] as [subValue1_ID]
,1 as [priority]
,'true' as [isActive]
FROM [proposalPackage]
WHERE [proposalPackageID] = @proposal
ELSE IF @val2 > 0
INSERT INTO [jTable2]
([projectID]
,[value2_ID]
,[priority]
,[isActive])
SELECT
@project as projectID
,@val2 as [value2_ID]
,1 as [priority]
,'true' as [isActive]
FROM [proposalPackage]
WHERE [proposalPackageID] = @proposal
END IF;
一切似乎都在解析,直到它到达“end if;”当它给我一个“语法错误”时。
我尝试了一个 CASE 语句,但失败得很惨……只有在检查相同的变量/字段值时,CASE 似乎才合适。
问题 1:end/end if 后面的正确语法是什么?我到处看,它都说要使用分号(;)。 问题2:有没有更好的方法来捕捉这只老鼠?
感谢任何帮助。
谢谢, 鲍勃
【问题讨论】:
向我们显示错误消息。另外,提醒一下 0 不等于 NULL SQL Server 没有END IF
。它有由BEGIN
/END
分隔的语句块。
错误信息:Msg 102, Level 15, State 1, Line 43 'END' 附近的语法不正确另外,在 DECLARE 语句中的值设置为 0...
@Gordon Linoff ...这太容易了...谢谢。如何让您的评论成为我的答案?
【参考方案1】:
SQL Server 不使用END IF
来表示IF
块的结束,您需要将内容包装在BEGIN
/END
内:
IF @val1 > 0
BEGIN
INSERT ... --something
END
ELSE IF @val2 > 0
BEGIN
INSERT ... --something else
END
另外,由于您的 IF
块中只有一个语句,您可以完全省略 BEGIN
/END
,但我不喜欢这样,因为它会导致难以发现错误。
【讨论】:
以上是关于在 if ... then 中使用插入语句 (SQL)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PL/SQL 块 (IF/THEN) 中执行“插入...选择...
Pandas 使用 If/Then/Else 语句在循环中抛出错误