我有一個接受逗號分隔的值串列作為引數的存盤程序
SELECT *
FROM users
WHERE username IN (SELECT value FROM STRING_SPLIT( @userList, ','))
我想更改 where 子句以對每個值使用 like
SELECT *
FROM users
WHERE username LIKE 'value1%'
OR username LIKE 'value2%' ...
我不知道該怎么做。有任何想法嗎?
uj5u.com熱心網友回復:
您不需要建立一個巨大的條件串列,OR只需加入LIKE:
SELECT u.username, f.value
FROM dbo.users AS u
INNER JOIN SPLIT_STRING(@userList, ',') AS f
ON u.username LIKE f.value '%';
uj5u.com熱心網友回復:
使用起來更簡單EXISTS:
WITH cte AS (SELECT value FROM STRING_SPLIT( @userList, ','))
SELECT u.*
FROM users u
WHERE EXISTS (SELECT 1 FROM cte c WHERE u.username LIKE c.value '%');
uj5u.com熱心網友回復:
這里真正的答案是根本沒有逗號分隔的串列。保持資料標準化并改用表值引數。
首先創建一個Table型別
請注意主鍵的使用,它可以為您提供免費索引。在這個特定的例子中,我認為它不會被使用,
LIKE因為=
CREATE TYPE dbo.NameList TABLE (value varchar(100) PRIMARY KEY);
然后在您的程式中使用它
CREATE OR ALTER PROC dbo.GetUserList
@userList dbo.NameList
AS
SELECT u.*
FROM users u
WHERE EXISTS (SELECT 1
FROM @userList ul
WHERE u.username LIKE ul.value '%'
);
你像這樣使用它
DECLARE @list dbo.NameList;
INSERT @list (value) VALUES ('value1'),('value2');
EXEC dbo.GetUserList @list;
大多數客戶端庫也可以傳遞這些引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/493656.html
