【问题标题】:SQL CLR Function Table Input & OutputSQL CLR 函数表输入和输出
【发布时间】:2016-01-02 06:28:55
【问题描述】:

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

我在 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

错误: 消息 6552,级别 16,状态 3,过程 ufn,第 2 行 “ufn”的 CREATE FUNCTION 失败,因为参数“@sInputTable”的 T-SQL 和 CLR 类型不匹配。

有人可以帮忙吗? 如何在 SQL 中“分配”输入参数?

【问题讨论】:

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


    【解决方案1】:

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

    您还应该确保列名与您的 InputRow 类定义相匹配。为了使它更容易,我只是确保名称始终相同。即把IDsID改为anIDTextsText改为SomeText

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 2021-03-20
      • 2015-07-26
      • 2017-07-11
      相关资源
      最近更新 更多