[英]Passing a List<string> to a stored procedure
我有一個字符串列表,我需要檢查列表中的任何值是否包含在數據庫表中。如果存在,則返回現有值的數據集。
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;
}
我的存儲過程是
CREATE PROCEDURE spCheckDocNumber
@DocNumber VARCHAR(MAX)
AS
BEGIN
SELECT * FROM tblDocumentHeader WHERE DocumentNumber = @DocNumber
END
我需要知道如何將列表傳遞給存儲過程以及如何在過程中檢查列表。 請幫忙
創建一個 Split function,它根據 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);
然后使用 Split function 在逗號上打斷,然后您可以使用 output 作為表,然后加入您要查找的表。
這可以使拆分逗號分隔列表變得非常容易。 然后你可以傳入一個字符串,所有 hte 值都用逗號分隔。
希望這可以幫助!
您可以使用這樣的代碼: 這適用於 SQL Server 2005(及更高版本):
create procedure IGetAListOfStrings
@List xml -- This will recevie a List of values
as
begin
-- You can load then in a temp table or use it as a subquery:
create table #Values (ListValue nvarchar(20)); -- adjust nvarchar size
INSERT INTO #Values
SELECT DISTINCT params.p.value('.','varchar(20)') -- adjust nvarchar size
FROM @List.nodes('/params/p') as params(p);
...
end
您必須使用如下參數調用此過程:
exec IGetAListOfValues
@List = '<params> <p>string1</p> <p>string2</p> </params>' -- xml parameter
節點 function 使用 xPath 表達式。 在本例中,它是/params/p
,因此 XML 使用<params>
作為根,使用<p>
作為元素。
有關詳細信息,請參閱此答案: 將值列表傳遞給存儲過程
也許您可以改用 sql 中的In 運算符。 在http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm上也有一些關於如何使用它的教程。
您必須自己編寫代碼,使用 xml sql 數據類型是一個不錯的選擇。
請參閱: 將參數數組傳遞給代碼示例的存儲過程。
發送 XML 至 SQL
List<string> lst = new List<string> {
"1",
"2",
"3"
};
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add(string.Empty, string.Empty);
StringBuilder sb = new StringBuilder();
using (var sw = new StringWriter(sb)) //serialize
{
var serializer = new XmlSerializer(typeof (List<string>));
serializer.Serialize(sw, lst, namespaces);
}
現在,將 SB 作為參數發送到 sql。
就這樣。
不要使用 CSV。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.