有没有办法阻止SQL Server在CREATE/ALTER期间验证存储过程中的SQL

Eoi*_*ell 6 sql-server validation stored-procedures linked-server

我们系统的一个方面要求我们的SQL Server实例通过链接的服务器连接与MySQL服务器通信.

MSSQL - > LinkedServer(MSDASQL ODBC提供程序) - > MySQL ODBC连接器 - > MySQL DB

链接服务器上的表在SPROC中沿着行调用

CREATE PROCEDURE DoStuff
AS

SELECT a.ID, a.Name, b.OtherProperty
FROM   MyDatabase..MyTable a
JOIN   LINKSRVR...OtherTable b
ON     a.ID = b.ID

GO
Run Code Online (Sandbox Code Playgroud)

问题是MySQL数据库位于另一个网络上,只能通过VPN访问,并且除非VPN处于活动状态,否则CREATE或ALTER语句会因以下错误而中断.

The OLE DB provider "MSDASQL" for linked server "LINKSRVR" reported an error. 
 The provider did not give any information about the error.

Cannot initialize the data source object of OLE DB provider 
"MSDASQL" for linked server "LINKSRVR".
Run Code Online (Sandbox Code Playgroud)

无论如何都要强制SQL Server继续使用我告诉它的SQL创建SPROC,而不是尝试验证LinkedServer是否已启动/关闭.

Joe*_*lli 6

您必须通过将其置于字符串中并将其作为动态SQL执行来"隐藏"来自编译器的有问题的SQL.