我是新来的,这是我的第一个问题。
我在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中的输入参数?
答案 0 :(得分:0)
在CLR函数中,您应指定ID和Text允许空值,例如TableDefinition:="ID int null, Text nvarchar(max) null"
。
您还应确保列名与InputRow类定义匹配。为了方便起见,我只是确保名称始终相同。也就是说,将ID
和sID
更改为anID
,Text
和sText
更改为SomeText
。