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);