在 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 语句在循环中抛出错误

postgresql中使用if else语句

if判断语句

2 个要求:1)用 FORALL 替换多个 FOR 循环 2)在向表中插入数据时使用 IF-THEN-ELSE 条件

PL/SQL if-then语句