我想创建一个存储过程,将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>
客户端可以发送1个参数,2个,3个,10个,20个参数等我们不知道。如下所示:
exec moveRecords(any no. of parameters)
我提出了类似以下的解决方案:
orderNo
(由客户端发送)放入一个temp_Table
并从我的存储过程中的temp_Table
中检索这些内容。 orderNo
,并根据此数组调用过程。我正在寻找其他选择。
答案 0 :(得分:5)
如果使用MSSQL 2008或更高版本,则可以使用TVP(表值参数)。这是描述它们的article。以下是关于在C#中使用TVP的question。
TVP很容易使用:CREATE TYPE dbo.NameOfYourType ...
命令定义一种TVP。create procedure moveRecords(@Input dbo.NameOfYourType READONLY) ...
。DataTable
表示。答案 1 :(得分:0)
您可以传递xml并按照here所述在过程中解析它。这个sa,也描述了表值参数。
答案 2 :(得分:0)
create procedure Usp_Testproc
(
@iordernumber int
)
as
begin
insert into mainTable(orderNo,date,siteID)
select orderNo,date,siteID from ArchiveTable where orderNo=@iordernumber