数据表以传递存储过程中的批量值

时间:2011-09-18 21:45:27

标签: sql tsql

我正在尝试使用数据表将批量值传递给我的存储过程,如下所示:

 var idlist = new DataTable();
        idlist.Columns.Add("sid", typeof(int));
        idlist.Columns.Add("suid", typeof(int));
        idlist.Rows.Add(new object[] {1, 1});
        idlist.Rows.Add(new object[] {1, 2});
        cmd.Parameters.Add(new SqlParameter("@SID", Convert.ToString(idlist)));

在SQL Server中,存储过程如下所示:

ALTER  PROCEDURE [dbo].[SUBNETTEMP]
(
@SID as IDLISTS READONLY
 )

AS
BEGIN

Create table [tempIDTable] (sid int, suid int)

Insert into [tempIDTable]

select * from @SID

END

IDLISTS被定义为表格类型如下:

CREATE TYPE IDLISTS AS TABLE (
SID int, SUID int )
go

运行程序后,我不确定为什么我的存储过程不会创建temIDTable。我不确定存储过程是否成功执行?任何人都可以帮忙。

感谢。

1 个答案:

答案 0 :(得分:1)

在C#代码中,必须指定sqlDBType以使用表值参数。

所以试试这个:

SqlParameter myParam = cmd.Parameters.Add(new SqlParameter("@SID", idlist));
myParam.SqlDbType = SqlDbType.Structured;

有关详细信息和示例,请参阅this MSDN page