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 的引用未解决的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2010 中 SQLCLR 项目中的计算列
未解决在“产品:*”部分中对符号“属性:VS2019DEVENV”的引用
VS远程开发(远程调试)编译报错:对‘xxx’未定义的引用(设置库依赖顺序)(已解决)pthread(项目-->属性-->链接器-->输入-->库依赖项)