我无法解决使用选择记录的问题WHERE IN ().我正在C#后端工作,我发送一个逗号分隔的id值字符串.我期待查询该字符串中的所有记录.
这是我的示例字符串:
"548,549,550,551,712,713"
Run Code Online (Sandbox Code Playgroud)
这是我的 SQL Stored Procedure
@ids nvarchar(200)
SELECT * FROM Users
WHERE USers.ID IN (@ids)
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
将nvarchar值'548,549,550,551,712,713'转换为数据类型int时转换失败.
谢谢
SQL Server 2016及更高版本
Declare @ids nvarchar(200) = '123,456';
Select *
From Users
Where ID IN ( Select Value from STRING_SPLIT ( @ids , ',' ))
Run Code Online (Sandbox Code Playgroud)
对于旧版本的SQL Server 2005 - 2014
Declare @ids nvarchar(200) = '123,456'; --<-- Comma delimited list of Client Ids
Select *
From Users
Where ID IN (
SELECT CAST(RTRIM(LTRIM(Split.a.value('.', 'VARCHAR(100)'))) AS INT) IDs
FROM (
SELECT Cast ('<X>'
+ Replace(@ids, ',', '</X><X>')
+ '</X>' AS XML) AS Data
) AS t CROSS APPLY Data.nodes ('/X') AS Split(a)
)
Run Code Online (Sandbox Code Playgroud)