Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 2008 在编译时对远程表的同义词进行不必要的验证-SQL2K8 R2_Sql Server 2008_Linked Server_Synonym - Fatal编程技术网

Sql server 2008 在编译时对远程表的同义词进行不必要的验证-SQL2K8 R2

Sql server 2008 在编译时对远程表的同义词进行不必要的验证-SQL2K8 R2,sql-server-2008,linked-server,synonym,Sql Server 2008,Linked Server,Synonym,我在一个环境中工作,在这个环境中,数据存在于许多客户机数据库中,并且通过sql一个接一个地被拉入中央数据存储库 为了自动化测试过程,我编写了一个非常好的、简化的按钮脚本,用于备份、清除和重新提取用户指定客户端数据库上的数据。更改一些参数并点击run,它就可以正常工作了。脚本将交给半技术人员,因此必须简单 不过我有一个问题。该脚本大量使用动态生成的同义词,这些同义词通过链接服务器映射到远程表。其中一些表是由脚本创建的备份表 我发现,如果脚本创建的备份表之一被删除(或数据库副本在夜间刷新),而备份的

我在一个环境中工作,在这个环境中,数据存在于许多客户机数据库中,并且通过sql一个接一个地被拉入中央数据存储库

为了自动化测试过程,我编写了一个非常好的、简化的按钮脚本,用于备份、清除和重新提取用户指定客户端数据库上的数据。更改一些参数并点击run,它就可以正常工作了。脚本将交给半技术人员,因此必须简单

不过我有一个问题。该脚本大量使用动态生成的同义词,这些同义词通过链接服务器映射到远程表。其中一些表是由脚本创建的备份表

我发现,如果脚本创建的备份表之一被删除(或数据库副本在夜间刷新),而备份的同义词仍然存在于中央服务器上,则脚本将失败,并出现以下错误:

链接服务器“[linkedservername]”的OLE DB提供程序“SQLNCLI10” 不包含该表 “[database\u name]”“[schema\u name]”“[backup\u table\u name]”。桌子 不存在,或者当前用户没有访问的权限 那张桌子

在编译时,SQL Server正在脚本中引用的每个同义词后面检查有效的目标对象(表)。有没有一种方法可以防止SQL Server这样做,就像存储过程不再需要数据库对象存在才能创建一样

请注意,我确实有一个标志,用于确定是否在脚本末尾删除同义词,以简化调试/调查,这就是为什么这些同义词有时可能保留在服务器上的原因。但是,脚本在创建同义词之前会先删除每个同义词,以确保不会意外使用剩余的同义词

但由于错误发生在脚本编译时,因此它永远不会有机会删除旧的同义词。事实上,没有一行脚本被执行。因此,我甚至不能在脚本开头清除所有同义词


有没有办法关闭同义词编译检查?我希望将其保留为一个不需要用户干预或故障排除的“万事俱备”脚本。

我没有一个很好的解决方案,但如果将这一切都放在动态查询中,它将不会检查。是的,我想到了这一点,但创建同义词的全部目的是减少脚本中动态sql的数量。