Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在存储过程中传递大容量值的数据表_Sql_Tsql - Fatal编程技术网

Sql 在存储过程中传递大容量值的数据表

Sql 在存储过程中传递大容量值的数据表,sql,tsql,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});

我试图使用如下数据表将批量值传递给存储过程:

 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)));
CREATE TYPE IDLISTS AS TABLE (
SID int, SUID int )
go
在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
定义为表类型,如下所示:

 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)));
CREATE TYPE IDLISTS AS TABLE (
SID int, SUID int )
go
运行程序后,我不确定存储过程为什么不创建
temIDTable
。我不确定存储过程是否成功执行?有人能帮忙吗

谢谢。

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

所以试试这个:

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

有关更多信息和示例,请参阅。

是否有任何理由要求参数必须是表格?是否可以将参数更改为2个独立的int字段而不是表?还可以将:Convert.ToString(idlist)更改为:idlist@Moe西斯科,谢谢你接电话。我更改了代码以删除转换。