我想对数据表执行SQL查询,并返回ID与特定列表中的任何ID都匹配的ID的记录(这些记录将作为参数传递给SQL TableAdapter查询)。正在检查的此ID是表中的外键。以下是我正在使用的代码,仅包含相关内容:
SELECT BookingID, DogID
FROM Booking
WHERE DogID IN (...)
理想地,我希望能够传递字符串类型的列表。
您可以将id作为,
分隔的字符串传递,并使用用户定义功能进行拆分:
尝试以下:
UDF
CREATE FUNCTION [dbo].[Udf_stringtolist] (@List NVARCHAR(max),
@Delimeter NVARCHAR(10))
returns @tmpListTable TABLE (
value NVARCHAR(max))
AS
BEGIN
DECLARE @DelimPosition INT
SELECT @DelimPosition = Charindex(@Delimeter, @List)
WHILE @DelimPosition > 0
BEGIN
INSERT INTO @tmpListTable
(value)
VALUES (Cast(Ltrim(Rtrim(LEFT(@List, @DelimPosition - 1))) AS
VARCHAR(
100)))
SELECT @List = RIGHT(@List, Len(@List) - @DelimPosition),
@DelimPosition = Charindex(@Delimeter, @List)
END
IF Len(@List) > 0
INSERT INTO @tmpListTable
(value)
VALUES (Cast(Ltrim(Rtrim(@List)) AS VARCHAR(100)))
RETURN
END
使用功能:
DECLARE @idList NVARCHAR(max)=',1,2,3,4,5,6';
SELECT bookingid,
dogid
FROM booking
WHERE dogid IN (SELECT *
FROM [dbo].[Udf_stringtolist] (@idList, ',')
ORDER BY 1)
有两种方法。