从客户端传递给存储过程的参数数量未知.如何处理?

Aru*_*gar 1 sql sql-server stored-procedures

我想创建一个存储过程,将Archive表中的一些记录插入主表.

我的问题是客户端在他的网格中有多个复选框,他/她可以检查任意数量的复选框.每个复选框代表Archive表中的记录.每条记录都由orderNo.基于orderNo我想创建一个存储过程,从Archive表中获取记录并将其插入主表.

我的问题:如何有效地处理此存储过程中的未知数量的参数?在伪代码中:

create procedure moveRecords(what parameters i should take here)
as 
begin
insert into mainTable(orderNo,date,siteID) select orderNo,date,siteID from 
ArchiveTable where orderNo=<here what i write>
Run Code Online (Sandbox Code Playgroud)

客户端可以发送1个参数,2个,3个,10个,20个参数等我们不知道.类似于以下内容:

exec moveRecords(any no. of parameters)
Run Code Online (Sandbox Code Playgroud)

我提出了如下解决方案:

  1. 通过将所有orderNo(由客户端发送)放入一个temp_Table并从temp_Table我的存储过程中检索这些.
  2. 在服务器端,我们orderNo在数组的基础上采用数组和调用过程.

我正在寻找替代品.

Mic*_*ski 5

如果您使用MSSQL 2008或更高版本,则可以使用TVP(表值参数).这是一篇描述它们的文章.这是一个关于从C#使用TVP 的问题.

TVP很容易使用:

  1. 首先,您必须使用CREATE TYPE dbo.NameOfYourType ...命令定义一种TVP .
  2. 然后,您必须修改您的存储过程.例如:create procedure moveRecords(@Input dbo.NameOfYourType READONLY) ....
  3. 然后从C#调用此存储过程作为任何其他存储过程.TVP参数用DataTableC#表示.