Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2005如何在创建过程中忽略错误_Sql_Sql Server 2005_Stored Procedures - Fatal编程技术网

SQL Server 2005如何在创建过程中忽略错误

SQL Server 2005如何在创建过程中忽略错误,sql,sql-server-2005,stored-procedures,Sql,Sql Server 2005,Stored Procedures,我需要在SQLServer2005中创建一个存储过程。在过程的某个地方,我必须连接到一个表,该表不存在于测试环境中,但存在于活动环境中(在链接服务器的数据库中)。我不会在测试环境中运行该过程,但我需要它存在,以便在应用程序中创建ORM代码 SQL Server自然会引发错误“在sys.servers中找不到服务器‘xxx’。请验证指定的服务器名称是否正确。如有必要,请执行存储过程sp_addlinkedserver以将服务器添加到sys.servers。”。但是,我知道我无法将此服务器添加到测试

我需要在SQLServer2005中创建一个存储过程。在过程的某个地方,我必须连接到一个表,该表不存在于测试环境中,但存在于活动环境中(在链接服务器的数据库中)。我不会在测试环境中运行该过程,但我需要它存在,以便在应用程序中创建ORM代码

SQL Server自然会引发错误“在sys.servers中找不到服务器‘xxx’。请验证指定的服务器名称是否正确。如有必要,请执行存储过程sp_addlinkedserver以将服务器添加到sys.servers。”。但是,我知道我无法将此服务器添加到测试环境中,因为它无法从外部访问


所以,我的问题是,如何通过忽略错误来创建存储过程?有什么办法吗?

如果您确信一切都正确,并且该过程在实时环境中运行良好,那么请使用
sp\u addlinkedserver
创建一个假链接服务器

我的意思是,如果过程体包含一个名为
test\u linked
的链接服务器,并且如果找不到它,那么它将抛出错误

使用
sp_addlinkedserver
并创建一个名为
test_linked
的假链接服务器,指向您的测试环境甚至实时环境。这将解决问题,因为它将尝试检查名为
test\u linked
的链接服务器是否存在于
sys.servers
中,但除非您正在运行该过程,否则不会访问实际链接服务器(AFAIK)


正如在评论中所提到的,使用同义词将是一种更干净的方法。

这是一个老思路,但是如果其他人也有同样的问题,这里有另一个解决方案:

您可以通过文本访问服务器,该过程将通过

create proc test
as    
declare @myserver varchar(50) = '[myserver\myinst]'
exec('select * from '+@myserver+'.dbo.table')

这样,proc将在任何环境下编译,但只能在生产环境下成功运行

您应该使用同义词,而不是在查询中硬编码链接的服务器名称。在测试环境中,这允许您仅将同义词设置为某个本地对象,而在生产环境中,它指向实际链接的服务器。现在,这两个地方的代码可以是相同的,因为它们引用的是“相同”的同义词。同义词是一种非常、非常、非常干净的方法。我不敢不同意你的意见:)但我并没有从脑海中产生这个想法。答案经过编辑,包括你们在评论中所说的。谢谢你们。我将使用同义词,因为在一个不是我的服务器中创建一个假链接服务器不是一个好方法。@AaronBertrand现在,问题是,我能够定义同义词,即使我不访问它;然而,当我尝试创建过程时,我得到了相同的错误。@ZaferSernikli,你尝试过我建议的方法吗?我知道在出现同义词的情况下,这种方法看起来可能不太好,但它确实有效。此外,即使服务器不是您的,只创建一个链接服务器也不会造成任何损害。