我有这段代码:
IF (@TestStatusId = @MarkedByUser)
BEGIN
DECLARE @NOOP1 BIT;
END
ELSE
BEGIN
DECLARE @NOOP2 BIT;
END
我想有三个条件。当@TestStatusId = @MarkedByUser时,@ TestStatusId = @MarkedByAdmin,当@TestStatusId是其他东西时的默认值。
有没有办法可以在没有多重IF检查的情况下做到这一点?
这是我想要的,但语法似乎不合适:
CASE @TestStatusId
WHEN @MarkedByAdmin THEN BEGIN DECLARE @NOOP1 BIT; END
WHEN @MarkedByUser THEN BEGIN DECLARE @NOOP2 BIT; END
ELSE DECLARE @NOOP3 BIT;
END
答案 0 :(得分:0)
使用@Vladimir
建议的嵌套IFIF (@TestStatusId = 0)
BEGIN
-- CODE FOR NOOP1
PRINT 0
END
ELSE IF (@TestStatusId = 1)
BEGIN
-- CODE FOR NOOP2
PRINT 1
END
ELSE
BEGIN
-- CODE FOR NOOP3
PRINT 2
END
答案 1 :(得分:0)
我真的不喜欢这种做法;当您声明不同的变量时,其余代码应重复这些IF
以避免使用未声明的变量。
由于缺乏您需要实现的更多细节,这里有一个非常简单的示例,说明如何使用动态SQL执行操作,而无需重复代码。
DECLARE @DynSQL NVARCHAR(100)
DECLARE @Variable NVARCHAR(10)
SELECT @Variable = CASE @TestStatusId WHEN @MarkedByAdmin THEN '@NOOP1' WHEN @MarkedByUser THEN '@NOOP2' ELSE '@NOOP3' END
SET @DynSQL = 'DECLARE ' + @Variable + ' BIT; SET ' + @Variable + ' = 1; SELECT ' + @Variable + ';'
EXEC sp_executesql @DynSQL
我希望对您的问题的进一步解释将允许我删除所有这一建议更好的策略。