Sql server 如何模拟多个IF检查?
我有以下代码:Sql server 如何模拟多个IF检查?,sql-server,Sql Server,我有以下代码: IF (@TestStatusId = @MarkedByUser) BEGIN DECLARE @NOOP1 BIT; END ELSE BEGIN DECLARE @NOOP2 BIT; END 我想有三个条件。当@TestStatusId=@MarkedByUser、@TestStatusId=@MarkedByAdmin时,@TestStatusId为其他内容时为默认值 有没
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
使用@Vladimir建议的嵌套IFs
IF (@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
我真的不喜欢这种方法;当您声明不同的变量时,代码的其余部分应该重复这些
IF
s,以避免使用未声明的变量
由于缺少关于需要实现什么的更多细节,这里有一个非常简单的示例,说明如何使用动态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
我希望对您的问题的进一步解释能让我消除所有这些,并提出更好的策略。您希望在每种情况下发生什么?声明不同的变量?或者使某些变量具有不同的值?我希望有运行的代码来替换那些声明,只需将它们放在那里,使问题简短。如果,很可能必须使用多个(可能是嵌套的)
CASE
是具有单一类型的单一结果的单一表达式,您不能将此类代码放入CASE
中。但在其余代码中会发生什么?它使用哪个变量?或者您是否计划在其他地方重复这些,创建动态SQL?如果你详细描述整个场景,也许有更好的选择。@alan,这是一种奇怪的方法。你想完成什么?以后不能检查变量是否存在——代码将失败,仅此而已。