Передача параметров в хранимую процедуру эффективным способом - PullRequest
2 голосов
/ 26 ноября 2010

Привет, каков эффективный способ передачи параметров хранимой процедуре в SQL Server?

На самом деле значение моего параметра содержит нечто вроде

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

что-то подобное до 1000

Поэтому я попытался передать 1000 значений, разделенных запятыми, одному параметру, и он работает нормально.

Но есть ли другие лучшие решения, кроме этого?

Спасибо

Ответы [ 2 ]

2 голосов
/ 26 ноября 2010

Используя Sql Server 2008, вы можете использовать Табличные параметры

Кроме этого, да, это принятое решение.

Вы также можете взглянуть на тип данных XML

0 голосов
/ 26 ноября 2010

Вы также можете передать параметр, используя 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, используя следующий способ

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 

Хоп, как тебе нравится

...