【问题标题】:VS SQLCLR: Function X has unresolved reference to schema YVS SQLCLR:函数 X 对模式 Y 的引用未解决
【发布时间】:2016-04-18 15:55:17
【问题描述】:

我正在使用 Visual Studio 2013 创建一个新的 SQL CLR,并在项目属性中将默认架构设置为“decASM”(原为“dbo”)。当我进行此更改并重建项目时,VS 会生成一个 sql 文件,如下所示:

--------------------------------------------------------------------------------
--     This code was generated by a tool.
--
--     Changes to this file may cause incorrect behavior and will be lost if
--     the code is regenerated.
--------------------------------------------------------------------------------

CREATE FUNCTION [decASM].[ExecFoxPro_SayHello] (@name [nvarchar](MAX))
RETURNS [nvarchar](MAX)
AS EXTERNAL NAME [dcFoxProAssy].[UserDefinedFunctions].[ExecFoxPro_SayHello];

GO

CREATE FUNCTION [decASM].[GetAllowedPaths] (@serviceUrl [nvarchar](MAX))
RETURNS [nvarchar](MAX)
AS EXTERNAL NAME [dcFoxProAssy].[UserDefinedFunctions].[GetAllowedPaths];

GO

CREATE FUNCTION [decASM].[GetTableRowCount] (@serviceUrl [nvarchar](MAX), @foxProPath [nvarchar](MAX), @tableName [nvarchar](MAX))
RETURNS [nvarchar](MAX)
AS EXTERNAL NAME [dcFoxProAssy].[UserDefinedFunctions].[GetTableRowCount];

GO

每次 CREATE FUNCTION 调用都会出错:

Error   1   SQL71501: Function: [decASM].[ExecFoxPro_SayHello] has an unresolved reference to Schema [decASM].  
Error   2   SQL71501: Function: [decASM].[GetAllowedPaths] has an unresolved reference to Schema [decASM].  
Error   3   SQL71501: Function: [decASM].[GetTableRowCount] has an unresolved reference to Schema [decASM].

如果我将默认架构改回“dbo”,则项目构建成功。我已经搜索了项目属性和谷歌,但找不到任何关于如何添加对“decASM”的引用的信息。

【问题讨论】:

    标签: sql-server visual-studio-2013 schema sql-server-data-tools sqlclr


    【解决方案1】:

    您还必须将Build Action 设置为Build。否则错误会一直显示。

    在以下屏幕截图中,Selective.sql 是我添加到项目中的 Schema 对象。点击 F4 进入属性窗口。

    【讨论】:

      【解决方案2】:

      您还需要创建 Schema,作为单独的 SSDT 对象。仅通过指定要将其用于 SQLCLR 对象,它不会自动为您创建。您应该能够:

      • 在项目的任意位置添加新项目(Control + Shift + A
      • 选择模板 SQL Server > 安全性 > 架构
      • 为项目/文件命名:decASM
      • 保存并关闭脚本

      它将为此在您的项目中创建一个单独的 SQL 文件,其中包含单个命令 CREATE SCHEMA [decASM],并在您发布 SQLCLR 代码时部署它。

      上述步骤对我使用 Visual Studio 2013 确实有效。

      【讨论】:

      • 我必须在数据库中运行创建模式脚本,然后将数据库重新导入 SSDT 项目吗?
      • @user1490835 如果您的实际问题是关于 Schema 的,那么我会说您不需要先在数据库中创建它。但是由于您实际上是在询问 something related to SQLCLR,我会说您的问题与 Schemas 完全无关。我将在您发布的问题中解决这个问题。
      猜你喜欢
      • 1970-01-01
      • 2014-05-22
      • 2012-11-02
      • 2014-01-25
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      相关资源
      最近更新 更多