1

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

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

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

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

链接服务器“[linkedservername]”的 OLE DB 提供程序“SQLNCLI10”不包含表“[database_name]”。“[schema_name]”。“[backup_table_name]”。该表不存在或当前用户对该表没有权限。

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

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

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

有没有办法关闭同义词编译检查?我想保留一个不需要用户干预或故障排除的单一功能脚本。

4

0 回答 0