微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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页面上提到表值参数仍然很奇怪,但是从来没有解释如何实现这一点.如果你找到任何解决方案,我想知道.

原文地址:https://www.jb51.cc/mssql/82140.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐