在if ... then(SQL)中使用插入语句

时间:2018-06-29 14:30:44

标签: sql sql-server sql-server-2008-r2

(使用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;

一切似乎都可以解析,直到达到“ if if;”为止。当它给我一个“语法错误”时。

我尝试了CASE语句,但是失败了...仅在检查相同的变量/字段值时CASE才合适。

问题1:如果结束/结束之后,正确的语法是什么?我到处看的地方都说要用分号(;)。 问题2:是否有更好的方法来捕捉此鼠标?

感谢您的协助。

谢谢, 鲍勃

1 个答案:

答案 0 :(得分:4)

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,但我对此并不满意,因为它可能导致难以发现错误。