在编译时不需要验证远程表的同义词 - SQL2K8 R2

时间:2013-08-13 13:56:22

标签: sql-server-2008 linked-server synonym

我在一个环境中工作,在这种环境中,数据存在于众多客户端数据库中,并且逐个通过sql将其拉入中央数据存储库。

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

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

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

  

链接服务器“[linkedservername]”的OLE DB提供程序“SQLNCLI10”   不包含表格   “”[DATABASE_NAME] “ ”[SCHEMA_NAME]“。 ”[backup_table_name]“”。桌子   要么不存在,要么当前用户没有权限   那张桌子。

在编译时,SQL Server正在检查脚本中引用的每个同义词后面是否有效的目标对象(表)。有没有办法阻止SQL Server这样做,类似于存储过程不再需要存在数据库对象才能被创建?

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

但是因为错误发生在脚本编译时,它永远不会有机会丢弃旧的同义词。实际上,没有一行脚本被执行。所以我甚至不能在脚本开头清除所有同义词。

有没有办法关闭同义词编译检查?我想保留一个单一的do-everything脚本,无需用户干预或故障排除。

0 个答案:

没有答案