Sql 在中没有可用记录时,选择使用IN子句的所有记录

Sql 在中没有可用记录时,选择使用IN子句的所有记录,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,我试图根据逗号分隔的值查询一个表。如果存在值,我需要使用。如果为空,我需要选择全部 DECLARE @UserIdList VARCHAR(500) = '150, 112' // Not working when its '' DECLARE @Users TABLE (UserId INT); WITH UserCSVtoTable AS ( SELECT CAST('<XMLRoot><RowData>' + REPLACE(t.va

我试图根据逗号分隔的值查询一个表。如果存在值,我需要使用。如果为空,我需要选择全部

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)
它只有在我发送值时才起作用。如果我发送“”,它不会占用所有记录

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

您可以使用:

SELECT UserId, Email
From Users
Where UserId IN (Select UserId from @Users)
  OR NOT EXISTS(SELECT 1 FROM @Users);
假设
UserId
定义为
notnull
,那么这两个条件是互斥的

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