将List <string>传递给存储过程

cha*_*ara 3 sql-server asp.net stored-procedures

我有一个字符串列表,我需要检查列表中的任何值是否包含在数据库table.if exists中返回现有值的数据集.

public DataSet CheckDocumentNumber(List<string> DocNumber)
{
   DataSet DocNum = new DataSet();
   SqlTransaction transaction = DALDBConnection.SqlConnection.BeginTransaction();

   try
   {
      string[] taleNames = new string[1];
      taleNames[0] = "DocNum";
      SqlParameter[] param = new SqlParameter[1];
      param[0] = new SqlParameter("@DocNumber", DocNumber);

      SqlHelper.FillDataset(transaction, CommandType.StoredProcedure, "spCheckDocNumber", DocNum, taleNames, param);
      transaction.Commit();
   }
   catch (Exception e)
   {
      transaction.Rollback();
   }

   return DocNum;
}
Run Code Online (Sandbox Code Playgroud)

我的存储过程是

CREATE PROCEDURE spCheckDocNumber
    @DocNumber VARCHAR(MAX)
AS
BEGIN
   SELECT * FROM tblDocumentHeader WHERE DocumentNumber = @DocNumber
END
Run Code Online (Sandbox Code Playgroud)

我需要知道如何将列表传递给存储过程以及如何在过程中检查列表.请帮助

Ste*_*man 6

Crate一个Split函数,它根据char分割字符串.

GO
CREATE FUNCTION dbo.Split (@sep char(1), @s varchar(8000))
RETURNS table
AS
RETURN (
    WITH splitter_cte AS (
      SELECT CHARINDEX(@sep, @s) as pos, 0 as lastPos
      UNION ALL
      SELECT CHARINDEX(@sep, @s, pos + 1), pos
      FROM splitter_cte
      WHERE pos > 0
    )
    SELECT SUBSTRING(@s, lastPos + 1,
                     case when pos = 0 then 80000
                     else pos - lastPos -1 end) as chunk
    FROM splitter_cte
  )
GO

SELECT *
  FROM dbo.Split(' ', 'the quick brown dog jumped over the lazy fox')
OPTION(MAXRECURSION 0);
Run Code Online (Sandbox Code Playgroud)

然后使用Split函数打破逗号,然后您可以将输出用作表,然后将其连接到您要查找的表.

这可以使分割逗号分隔列表变得非常容易.然后你可以传入一个字符串,其中所有的hte值都用逗号分隔.

希望这可以帮助!