加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server-2008 – SQL Server 2008中CLR过程的表值参数 – 可

发布时间:2020-12-12 16:32:35 所属栏目:MsSql教程 来源:网络整理
导读:This page from SQL Server 2008 BOL,谈到CLR存储过程,并有一个标题为“表值参数”的部分,它们说明了它们如何有利.这很棒 – 我很乐意在我的CLR过程中使用TVP,但不幸的是,这似乎是宇宙中这种可能性的唯一参考,该部分没有描述什么是语法(也不是进一步的信息在
This page from SQL Server 2008 BOL,谈到CLR存储过程,并有一个标题为“表值参数”的部分,它们说明了它们如何有利.这很棒 – 我很乐意在我的CLR过程中使用TVP,但不幸的是,这似乎是宇宙中这种可能性的唯一参考,该部分没有描述什么是语法(也不是进一步的信息在本段末)

当然,我可以很容易地找到关于如何使用T-SQL过程的TVP的描述,或者一般来说,如何执行CLR处理.但是写一个采用TVP的CLR proc?没有.这是非常不成功的,因为将多行数据传递给存储过程是一个受欢迎的问题.

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

[编辑]

当我遇到this,which seems to be the final nail in the coffin时,我即将发布到MS论坛之一.看起来不可能完成.

解决方法

我可以找到一个 lot more references.但是,这些都是将表值参数传递给TSQL过程,所以这几乎没有用.

但是,我得出结论,这是不可能的.首先,CLR和SQL类型之间有list of mappings.对于表类型,没有映射,所以以下不起作用,例如:

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

接着

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

无论您尝试什么类型(DataTable,DbDataReader,IEnumerable),CREATE PROCEDURE调用都会生成错误6552:“ClrTest”的CREATE PROCEDURE失败,因为参数“@tvp”的T-SQL和CLR类型不匹配.

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

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

也许你可以在Microsoft论坛上的某个地方问你的问题.他们在CLR sproc页面上提到表值参数仍然很奇怪,但是从来没有解释如何实现这一点.如果你找到任何解决方案,我想知道.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读