Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 server 2008 程序中表值参数中的标识列,如何定义DataTable_Sql Server 2008_Ado.net_Table Valued Parameters - Fatal编程技术网

Sql server 2008 程序中表值参数中的标识列,如何定义DataTable

Sql server 2008 程序中表值参数中的标识列,如何定义DataTable,sql-server-2008,ado.net,table-valued-parameters,Sql Server 2008,Ado.net,Table Valued Parameters,是否可以将具有[int]IDENTITY1,1类型列的table类型参数传递给过程,并使用作为输入参数传递的DataTable对象执行此存储过程 我得到以下错误:在表变量上不允许插入标识列。 表值参数\@xxxxx\的数据不符合该参数的表类型 我能找到的唯一相关注释是,如果在表值参数中为标识列提供值,则必须为会话发出SET identity_INSERT语句 看起来,即使PK没有在表参数中设置,它也会在某个点自动设置。哪里会发生这种情况?如何避免这种情况?如果问题是如何传递带有标记为INT ID

是否可以将具有[int]IDENTITY1,1类型列的table类型参数传递给过程,并使用作为输入参数传递的DataTable对象执行此存储过程

我得到以下错误:在表变量上不允许插入标识列。 表值参数\@xxxxx\的数据不符合该参数的表类型

我能找到的唯一相关注释是,如果在表值参数中为标识列提供值,则必须为会话发出SET identity_INSERT语句


看起来,即使PK没有在表参数中设置,它也会在某个点自动设置。哪里会发生这种情况?如何避免这种情况?

如果问题是如何传递带有标记为INT IDENTITY1,1列的TVP?你没有。TVP不是一张桌子。您可能正在指定TVP值,这意味着您不希望提供的值具有标识

该表通常是要在其上声明标识的表


如果问题是如何避免在TVP中设置PK?然后我需要更多的代码。

我遇到了同样的问题,我们需要类型上的标识,但不想提供值。关键是为该列使用SqlMetaData构造函数,该列将useServerDefault设置为true:

根据Tim Van Wassenhove的这篇文章

SQL:

创建类型[Star].[example]作为表 [序号][int]标识1,1不为空, [Name][nvarchar]200不为空, C:

var sqlMetaData=new[] { 新的SqlMetaDataOrdinal,SqlDbType.Int,true,false,SortOrder.Unspecified,-1, 新的SqlMetaDataName,SqlDbType.NVarChar,200 }; sqlRecords=newhashsetuserstoinclude.Selectuser=> { var record=新的SqlDataRecordsqlMetaData; record.SetString1,user.Name; 返回记录; }; 新的SqlMetaDataIdentityField,SqlDbType.Int,true,false,SortOrder.Unspecified,-1
错误是,您试图在标识列中插入一个值——默认情况下,这不是您应该做的。SQL Server应自行处理标识字段。因此,请更改插入,使其不为标识列提供值-让SQL Server处理该值。是的,我这样做了。我提供了一个没有值的列,但仍然存在错误。当我从DataTable中删除此列时,错误是缺少一列。您实际上是如何实现这一点的?+1要点。在未持久化的数据上拥有主键列没有任何价值。您可以在用户定义的表类型中跳过它们,但仍然可以在插入的最后一个表中声明它们,就像您可以将标识返回到新插入行的C代码中一样?绝对可以。你的框架是什么?听起来你想问一个新问题!:D@uriDium,您可以在不同的问题上使用本答案中提到的OUTPUT子句: