Đây là một UDF mà tôi đã sử dụng từ MSSQL 2000. Tôi tìm thấy ở đâu đó - xin lỗi, không thể nhớ ở đâu.
Về cơ bản, bạn có thể thực hiện một phép nối trên UDF, trong đó tham số đầu tiên là chuỗi phân cách và tham số thứ hai là dấu phân tách.
CHỌN t1.somecolumn TỪ t1 sometable INNER JOIN dbo.Split (@delimitedVar, '') t2 ON t1.ID = t2.Element
CREATE FUNCTION [dbo].[Split]
(
@vcDelimitedString varchar(max),
@vcDelimiter varchar(100)
)
RETURNS @tblArray TABLE
(
ElementID smallint IDENTITY(1,1), --Array index
Element varchar(1000) --Array element contents
)
AS
BEGIN
DECLARE @siIndex smallint, @siStart smallint, @siDelSize smallint
SET @siDelSize = LEN(@vcDelimiter)
--loop through source string and add elements to destination table array
WHILE LEN(@vcDelimitedString) > 0
BEGIN
SET @siIndex = CHARINDEX(@vcDelimiter, @vcDelimitedString)
IF @siIndex = 0
BEGIN
INSERT INTO @tblArray VALUES(@vcDelimitedString)
BREAK
END
ELSE
BEGIN
INSERT INTO @tblArray VALUES(SUBSTRING(@vcDelimitedString, 1,@siIndex - 1))
SET @siStart = @siIndex + @siDelSize
SET @vcDelimitedString = SUBSTRING(@vcDelimitedString, @siStart , LEN(@vcDelimitedString) - @siStart + 1)
END
END
RETURN
END
là id của tạo ra bởi người sử dụng đầu vào? – Eric
Người dùng chọn các bản ghi để tìm kiếm bằng một hộp kiểm nhưng họ không có quyền kiểm soát đối với "Id" thực tế là gì. – orandov
Sau đó, sql động không phải là một ý tưởng tồi nếu nó không phải chịu tiêm ... nhưng hãy thử câu trả lời tôi được đăng để an toàn. – Eric