【问题标题】:Send a list of IDs to a SQL Server stored procedure from c#从 c# 将 ID 列表发送到 SQL Server 存储过程
【发布时间】:2008-10-08 14:22:53
【问题描述】:

是否可以从 c# 将 ID 列表发送到存储过程?

UPDATE Germs
SET Mutated = ~Mutated
WHERE (GermID IN (ids))

【问题讨论】:

    标签: c# sql stored-procedures


    【解决方案1】:

    这可能是一个肮脏的黑客,但您可以创建一个临时表,然后从您的存储过程中加入它(假设它们在同一连接期间被访问)。例如:

    CREATE TABLE #ids (id int)
    INSERT INTO #ids VALUES ('123') -- your C# code would generate all of the inserts
    
    -- From within your stored procedure...
    UPDATE g
    SET Mutated = ~Mutated
    FROM Germs g
    JOIN #ids i ON g.GermID = i.id
    

    【讨论】:

      【解决方案2】:

      你可以试试我的做法:-

      创建一个名为 Split_String 的函数

      set ANSI_NULLS ON
      set QUOTED_IDENTIFIER ON
      go
      
      CREATE FUNCTION [dbo].[Split_String] 
      (   
          @MyString varchar(5000)
      )
      RETURNS @Results TABLE
      (
          Value varchar(1000)
      ) 
      AS
          BEGIN
              DECLARE @Pos int
              DECLARE @StrLen int
              DECLARE @MyLen int
              DECLARE @MyVal varchar
              SET @pos = 1
              SET @MyLen = 1
              WHILE @MyString <> ''
                  BEGIN
                      SET @MyLen = charindex(',',@MyString)   
                      IF @MyLen = 0 SET @MyLen = Len(@MyString)
                      INSERT @Results SELECT replace(substring(@MyString, @pos, @MyLen),',','')
                      SET @MyString = SUBSTRING(@MyString,@MyLen+1,len(@MyString))
                  END
              RETURN 
          END
      

      然后,当您使用 IN() 时,请按以下方式使用逗号分隔的字符串:-

      SELECT * FROM [youDataBase].[dbo].[Split_String] (<@MyString, varchar(5000),>)
      

      【讨论】:

      • 我在 SQL2005 中经常使用它,我发现 CLR 函数拆分字符串的速度更快,但由于查询计划不好,它们的整体性能不透明。
      【解决方案3】:

      根据This的文章,你可以试试Table Value Parameter。

      【讨论】:

      • 我相信这是特定于 SQL Server 2008 的。
      • 用户表类型在所有版本的 SQL Server 中都有效。 @BenHoffstein
      【解决方案4】:

      是的,您可以使用一大段 XML 来构建您的 ID 列表。然后您可以使用 OPENXML 并从该记录集中进行选择。

      查找 OPENXML、sp_preparexmldocument、sp_removexmldocument

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多