TSQL条件为NULL且=运算符

TSQL条件为NULL且=运算符,tsql,Tsql,我想把这写在一句话里,怎么做 -- Is there a block for this user? SELECT @BlockID = BlockID FROM [Blocks] WHERE UserID = @UserID -- If not exists, get the default one IF @BlockID IS NULL SELECT @BlockID = BlockID FROM [Blocks] WHERE UserID IS NULL 合并。它也很容易扩展

我想把这写在一句话里,怎么做

-- Is there a block for this user?
SELECT @BlockID = BlockID FROM [Blocks]  
WHERE UserID = @UserID

-- If not exists, get the default one
IF @BlockID IS NULL  
SELECT @BlockID = BlockID FROM [Blocks]  
WHERE UserID IS NULL

合并
。它也很容易扩展到两种以上的情况

select
  @BlockID = coalesce(u.BlockID, d.BlockID)
from
  Blocks d
  left join Blocks u on u.UserID = @UserID
where
  d.UserID is null

它只获取默认的blockid值-如果@Userid存在,它将永远不会获取与@Userid关联的值。@Lukasz:这将始终返回默认的块,对吗?如果存在用户特定的块呢?这只是一个有两种情况的例子,我有更多的情况1)获取用户特定的块2)如果不存在,获取组的默认块2)如果不存在,获取程序的默认块3)最后什么都不存在,获取默认块。上面我用两个例子简短地说了一下。+1:OP最初没有提到额外的例子,但是你的答案对于一般的解决方案来说会很好。美好的易于阅读和理解,性能如何?这比我的例子更好还是更糟糕?
SET @BlockID = (SELECT TOP 1 BlockID
                FROM [Blocks]
                WHERE UserID IS NULL OR UserID = @UserID
                ORDER BY CASE WHEN UserID IS NOT NULL THEN 0 ELSE 1 END)
select
  @BlockID = coalesce(u.BlockID, d.BlockID)
from
  Blocks d
  left join Blocks u on u.UserID = @UserID
where
  d.UserID is null