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页面上提到表值参数仍然很奇怪,但是从来没有解释如何实现这一点.如果你找到任何解决方案,我想知道. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |