【问题标题】:How to accept a list into an SQL TableAdapter query using C#?如何使用 C# 将列表接受到 SQL TableAdapter 查询中?
【发布时间】:2019-12-13 23:18:26
【问题描述】:

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

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

理想情况下,我希望能够传入字符串类型的列表。

【问题讨论】:

    标签: c# sql tableadapter


    【解决方案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) 
    

    【讨论】:

      【解决方案2】:

      有两种方法。

      1. 逗号分隔的 ID - 拆分时会导致性能问题
      2. XML - 是最好的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-23
        • 1970-01-01
        • 2014-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多