参数以有效的方式传递给存储过程

时间:2010-11-26 06:37:05

标签: sql-server stored-procedures parameter-passing

在SQL Server中将参数传递给存储过程的有效方法是什么?

实际上我的参数值包含一些像

这样的东西

@empids = '1,2,3,4,5,6,7,8,9'

这样的事情高达1000

所以我尝试将1000个以逗号分隔的值传递给单个参数,并且工作正常。

但除此之外还有其他最佳解决方案吗?

谢谢

2 个答案:

答案 0 :(得分:2)

使用Sql Server 2008,您可以使用Table-Valued Parameters

除此之外,是的,这是公认的解决方案。

您还可以查看XML data type

答案 1 :(得分:0)

您也可以使用xml传递参数

喜欢

string CustomerIdXML ="<NewDataSet><Table1><Id>56</Id></Table1><Table1><Id>57</Id></Table1></NewDataSet>";

SqlParameter[] _param = new SqlParameter[1];
_param[0] = new SqlParameter("@XDoc", CustomerIdXML);

SqlDataAccess.ExecuteNonQuery(SqlDataAccess.ConnectionString, CommandType.StoredProcedure, "sp1", _param);

您可以使用以下方式在sp中检索id

CREATE PROC [dbo].[sp1]        
  @xDoc NTEXT   
As       

DECLARE @docHandle INT          

EXEC sp_xml_preparedocument @docHandle OUTPUT, @xDoc          
BEGIN TRANSACTION          

UPDATE Tbl SET ISDelete = 1 WHERE Id IN (SELECT Id FROM OPENXML(@docHandle, '/NewDataSet/Table1', 3) WITH (Id BIGINT))  

IF @@ERROR <> 0         
    BEGIN         
        ROLLBACK TRANSACTION        
        RETURN @@ERROR       
    END          
COMMIT TRANSACTION          

EXEC sp_xml_removedocument @docHandle          
RETURN 1 

你喜欢这样的方式