SSDT + LinkedServer = 异构查询需要为连接设置 ANSI_NULLS 和 ANSI_WARNINGS 选项
Posted
技术标签:
【中文标题】SSDT + LinkedServer = 异构查询需要为连接设置 ANSI_NULLS 和 ANSI_WARNINGS 选项【英文标题】:SSDT + LinkedServer = Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection 【发布时间】:2015-09-18 16:27:48 【问题描述】:如果有人能帮助解决这个问题,我将不胜感激。我已经为此苦苦挣扎了太久,似乎无法解决。
我有一个带有存储过程的 SSDT 项目(VS2012、SQL2008) 引用链接服务器。
项目构建成功
尝试部署时,使用 (localdb) 或“常规”SQL 服务器,使用 F5 或 Schema Compare,部署失败,因为链接服务器未在目标中定义
定义链接服务器后,项目还是部署失败 任何引用链接服务器的存储过程:
错误 200 SQL72014:.Net SqlClient 数据提供者:消息 7405,级别 16, 状态 1,过程 usp_MemEligGetFullData,第 157 行异构 查询需要设置 ANSI_NULLS 和 ANSI_WARNINGS 选项 用于连接。这确保了一致的查询语义。使能够 这些选项,然后重新发出您的查询。
将 SET ANSI_NULL ON 和 SET ANSI_WARNINGS ON 添加到这些存储过程没有帮助,在项目属性的数据库设置中选择相应的复选框也没有帮助。
这对于企业环境中的整个团队来说是一个阻塞问题,因此,如果有人对为什么会发生这种情况有任何想法,我将不胜感激!
【问题讨论】:
【参考方案1】:-
在 Visual Studio 中,
右键单击存储过程
点击属性
将 ANSI Null 更改为“开启”
【讨论】:
当我将其更改为“ON”时,我看到警告消息“Property Value is not valid”。对此有什么想法吗? 您是否从列表中选择了它?还是您手动输入的?如果您手动输入,请尝试将其更改为 On 而不是 ON【参考方案2】:尝试通过 SSMS 创建存储过程,但在 create procedure 语句之前分批执行 SET ANSI_NULLS ON 和 SET ANSI_WARNINGS ON,如下所示:
SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
GO
CREATE PROCEDURE usp_MemEligGetFullData AS /* stuff */
如果成功,则检查 SSDT 生成的脚本是否还包含在 create procedure 语句之前的那些 set 语句。如果没有,请确保您启用了脚本数据库选项设置。如果仍然没有,那么在最坏的情况下,您可以创建 deployment contributor 来修改生成的 TSQL。
【讨论】:
以上是关于SSDT + LinkedServer = 异构查询需要为连接设置 ANSI_NULLS 和 ANSI_WARNINGS 选项的主要内容,如果未能解决你的问题,请参考以下文章