SQL Server 2008中CLR过程的表值参数 - 可能吗?

phi*_*red 17 clr stored-procedures sql-server-2008 table-valued-parameters

这个来自SQL Server 2008 BOL的页面讨论了CLR存储过程,并有一个标记为"表值参数"的部分,讨论了它们如何有利.这很好 - 我喜欢在我的CLR过程中使用TVP,但不幸的是,这似乎是宇宙中唯一可能的参考,并且该部分没有描述语法是什么(也没有进一步的信息链接在该段末尾)

当然,我可以很容易地找到如何从T-SQL过程中使用TVP的描述,或者如何一般地进行CLR过程.但是写一个带有TVP的CLR过程?没有.这是非常不寻常的,因为将多行数据传递到存储过程是一个流行的问题.

这让我想知道该页面上是否存在该部分是错误的.有人请告诉我它不是,并指出更多信息/示例.

[编辑]

当我遇到这个时,我也准备把它发布到MS论坛之一,这似乎是棺材中的最后一个钉子.看起来无法完成.

Ron*_*erg 5

我可以找到很多 引用.但是,这些都是用于将表值参数传递给TSQL过程,因此几乎没有用处.

但是,我得出的结论是,这是不可能的.首先,CLR和SQL类型之间存在映射列表.对于表类型,没有映射,因此以下方法不起作用,例如:

[SqlProcedure]
public static void StoredProcedure(DataTable tvp, out int sum)
{
    return 42;
}
Run Code Online (Sandbox Code Playgroud)

然后

CREATE TYPE MyTableType AS TABLE 
(
    Id INT NOT NULL PRIMARY KEY,
    [Count] INT NOT NULL
)
GO
CREATE ASSEMBLY ClrTest FROM '<somePath>'
GO
CREATE PROCEDURE ClrTest
AS EXTERNAL NAME ClrTest.StoredProcedures.StoredProcedure
GO
Run Code Online (Sandbox Code Playgroud)

您尝试任何类型(DataTable,DbDataReader,IEnumerable),该CREATE PROCEDURE呼叫继续产生错误6552:CREATE PROCEDURE为"CLRTest文件"失败,因为T-SQL和CLR类型参数"@tvp"不匹配.

其次,您链接到的页面上的文档说:用户定义的表类型不能作为表值参数传递给SQL Server进程中执行的托管存储过程或函数,或从中返回.

我似乎无法在任何地方找到如何在C#中创建用户定义的表类型,但这似乎也是一个死胡同.

也许你可以在微软论坛上的某个地方提问.他们在CLR sproc页面上提到表值参数仍然很奇怪,但从未解释如何实现它.如果您找到任何解决方案,我想知道.