SQL CLR功能表输入&产量

时间:2015-10-05 14:40:15

标签: .net sql-server vb.net clr

我是新来的,这是我的第一个问题。

我在VB中创建了一个dll,以便在SQL Server 2008 R2开发中使用它

如果我删除表输入(并使用xml),下面的示例是有效的,但我需要有一个表输入。

- VB -

[SqlFunction(DataAccess:=DataAccessKind.Read, FillRowMethodName:="FillRow", TableDefinition:="ID int, Text nvarchar(max)")]
Public Shared Function MyFunction(ByVal tbl As IEnumerable(Of InputRow)) As IEnumerable
...
End Function

Public Shared Sub FillRow(...)
...
End Sub

Public Class InputRow
    Public sID As SqlInt32
    Public sText As SqlString
End Class

- SQL -

Create ASSEMBLY [ASSEMBLY1] from '[PATH].dll'
WITH PERMISSION_SET = unsafe
CREATE ASSEMBLY [ASSEMBLY2] from '[PATH].XmlSerializers.dll'
WITH PERMISSION_SET = unsafe 

CREATE TYPE TableInput AS TABLE 
(ID int, MyText varchar(1024))

CREATE FUNCTION ufn
(@sInputTable TableInput READONLY)
RETURNS TABLE (
    anID int null, 
    SomeText nvarchar(max) null)
        WITH EXECUTE AS CALLER
AS EXTERNAL NAME MyDotNETAssembly.[MyNamespace.MyClassname].MyFunction

错误: Msg 6552,Level 16,State 3,Procedure ufn,Line 2 为" ufn"创造功能失败,因为参数" @sInputTable"的T-SQL和CLR类型不匹配。

有人可以帮忙吗? 我如何"分配" SQL中的输入参数?

1 个答案:

答案 0 :(得分:0)

在CLR函数中,您应指定ID和Text允许空值,例如TableDefinition:="ID int null, Text nvarchar(max) null"

您还应确保列名与InputRow类定义匹配。为了方便起见,我只是确保名称始终相同。也就是说,将IDsID更改为anIDTextsText更改为SomeText