如何使用C#将列表接受到SQL TableAdapter查询中?

问题描述 投票:0回答:2

我想对数据表执行SQL查询,并返回ID与特定列表中的任何ID都匹配的ID的记录(这些记录将作为参数传递给SQL TableAdapter查询)。正在检查的此ID是表中的外键。以下是我正在使用的代码,仅包含相关内容:

SELECT BookingID, DogID
FROM Booking
WHERE DogID IN (...)

理想地,我希望能够传递字符串类型的列表。

c# sql tableadapter
2个回答
1
投票

您可以将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) 

0
投票

有两种方法。

  1. 逗号分隔的ID-拆分时会导致性能问题
  2. XML-是最好的方法。
© www.soinside.com 2019 - 2024. All rights reserved.