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。
我正在使用 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。