Select 当 IN 中没有可用记录时,所有记录都使用 IN 子句

Select All records using IN Clause when no records available inside IN

我正在尝试根据逗号分隔值查询 table。如果存在值,我需要使用。如果它是空的,我需要 select all

DECLARE @UserIdList VARCHAR(500) = '150, 112' // Not working when its ''

DECLARE @Users TABLE (UserId INT);

WITH UserCSVtoTable AS 
(
    SELECT 
        CAST('<XMLRoot><RowData>' + REPLACE(t.val, ',', '</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
    FROM 
        (SELECT @UserIdList) AS t(val)
)
INSERT INTO @Users (UserId)
    SELECT m.n.value('.[1]', 'varchar(8000)') AS UserId
    FROM UserCSVtoTable
    CROSS APPLY x.nodes('/XMLRoot/RowData') m(n)

查询

SELECT UserId, Email
FROM Users
WHERE UserId IN (SELECT UserId FROM @Users)

它仅在我发送值时起作用。如果我发送 '' 它不会记录所有记录。

@Users列表中没有可用记录时,如何获取所有记录?

您可以使用:

SELECT UserId, Email
From Users
Where UserId IN (Select UserId from @Users)
  OR NOT EXISTS(SELECT 1 FROM @Users);

假设 UserId 定义为 NOT NULL 那么这两个条件是互斥的。