VS SQLCLR:函数 X 对模式 Y 的引用未解决

Posted

技术标签:

【中文标题】VS SQLCLR:函数 X 对模式 Y 的引用未解决【英文标题】:VS SQLCLR: Function X has unresolved reference to schema 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”的引用的信息。

【问题讨论】:

【参考方案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 完全无关。我将在您发布的问题中解决这个问题。

以上是关于VS SQLCLR:函数 X 对模式 Y 的引用未解决的主要内容,如果未能解决你的问题,请参考以下文章

无法连接到 SQLCLR 中的外部数据库

数据库项目vs2010中缺少部署选项卡

Visual Studio 2010 中 SQLCLR 项目中的计算列

奇怪错误 - CS0012:类型x在未引用的程序集中定义

未解决在“产品:*”部分中对符号“属性:VS2019DEVENV”的引用

VS远程开发(远程调试)编译报错:对‘xxx’未定义的引用(设置库依赖顺序)(已解决)pthread(项目-->属性-->链接器-->输入-->库依赖项)