我正在使用SQL管理Studio 2014。我有这样的SQL表:
sql_Type
| sql_Name
| sql_Parent
我想得到所有有特定父母的sql_Type
。我的变量@listParents
是 nvarchar(MAX(,包含所有用";"分隔的父项。
我该怎么办?我有开始,但我不知道在我的IN
中写什么:
DECLARE @listParents nvarchar(MAX) = 'Parent1;Parent2;Parent3;';
SELECT sql_Name
FROM [myTable]
WHERE sql_Type = 'Box' AND sql_Parent IN
(
-- What should I do wjth @listParents ?
)
MSSQL (
您可以使用CHARINDEX
来解决此问题:
DECLARE @listParents nvarchar(MAX) = 'Parent1;Parent2;Parent3;'
SELECT sql_Name
FROM test
WHERE sql_Type = 'Box' AND CHARINDEX(sql_Parent + ';', @listParents) > 0;
演示:http://sqlfiddle.com/#!18/64a6b/10/0
MSSQL (>= SQL Server 2016(:
从SQL Server 2016开始,您可以使用STRING_SPLIT
和IN
来解决此问题:
DECLARE @listParents nvarchar(MAX) = 'Parent1;Parent2;Parent3;'
SELECT sql_Name
FROM test
WHERE sql_Type = 'Box' AND sql_Parent IN (
SELECT value
FROM STRING_SPLIT(@listParents, ';')
WHERE RTRIM(value) <> ''
);
演示:http://sqlfiddle.com/#!18/64a6b/9/0