@string nvarchar(max),
@splitedstring nvarchar(max)
set @string='word1,word2 '
Kết quả: @splitedstring ='word1','word2'
Tạo function
CREATE FUNCTION [dbo].[StrinToStringList]
( @str nVARCHAR (MAX),
@delimeter nvarchar(2))
RETURNS
@result TABLE (
[ID] nvarchar(max) NULL)
AS
BEGIN
DECLARE @x XML
SET @x = '<t>' + REPLACE(@str, @delimeter, '</t><t>') + '</t>'
INSERT INTO @result
SELECT DISTINCT x.i.value('.', 'nvarchar(max)') AS token
FROM @x.nodes('//t') x(i)
ORDER BY 1
RETURN
END
Tạo bảng với dữ liệu như sau
Nếu sử dụng thủ tục dưới
create procedure CompanyFilter
(
@string nvarchar(max)='aaa,bbb'
)
as
begin
select * from table where names in(@string)
end
Nó sẽ thực thi như sau
Trong stored procedure tham số "@string" là chuỗi duy nhất truy vấn không có tên với "aaa, bbb" lý do tại sao bảng trả về không có gì.
Vì vậy, tái sửa đổi stored procedure như dưới đây
create procedure CompanyFilter
(
@string nvachar(max)='aaa,bbb
)
as
begin
Select * from table where names in (select id from dbo.StrinToStringList(@string,','))
end
Kết quả