我正在尝试使用数据表将批量值传递给我的存储过程,如下所示:
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
。我不确定存储过程是否成功执行?任何人都可以帮忙。
感谢。
答案 0 :(得分:1)
在C#代码中,必须指定sqlDBType以使用表值参数。
所以试试这个:
SqlParameter myParam = cmd.Parameters.Add(new SqlParameter("@SID", idlist));
myParam.SqlDbType = SqlDbType.Structured;
有关详细信息和示例,请参阅this MSDN page。