(使用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:是否有更好的方法来捕捉此鼠标?
感谢您的协助。
谢谢, 鲍勃
答案 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
,但我对此并不满意,因为它可能导致难以发现错误。