VS SQLCLR:函数 X 对架构 Y 有未解析的引用

VS SQLCLR: Function X has unresolved reference to schema Y

我正在使用 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',项目将成功构建。我搜索了项目属性和 Google,但找不到任何关于如何添加对 'decASM' 的引用的提及。

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

  • 将新项目 (Control + Shift + A) 添加到项目的任意位置
  • Select模板SQL服务器>安全>架构
  • 为项目/文件命名:decASM
  • 保存并关闭脚本

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

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

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

在下面的截图中,Selective.sql是我添加到项目中的Schema对象。按 F4 获取属性 window。