我正在写一个很长的脚本来在数据库之间迁移数据,我被告知不能使用同义词,因为它们是全局的,可能会与其他脚本打乱。我被告知要使用完全限定的表名、别名或同义词以外的其他名称。但我认为一定有更好的方法。
有没有一种方法可以有效地使用所谓的“同义词”,而不是实际创建真正的同义词?或者只为我的脚本创建本地同义词?或者,有没有办法将表名别名的作用域扩展到整个脚本,这样我就不必在每次插入/选择时都编写它们了?
这一切都是为了将长表名(其中一些长达70个字符)转换为3-6个字符之类的短名称,以极大地提高脚本的可读性。
发布于 2018-04-18 18:13:08
Synonyms不是全局的,而是模式的一部分。它们指向由四部分组成的名称,即server-database-schema-object。因此,您可以为您的脚本创建一个新的数据库,并在其中创建同义词:
create database MyScriptDb;
create synonym tbl1 for realdb.dbo.VeryLongTableName;只要没有其他脚本使用MyScryptDb,就很难看出它们会受到怎样的影响。
发布于 2018-04-18 18:15:41
这篇评论太长了。
一种可能性是在脚本的开头创建同义词,然后在所有退出路径上删除它们。也许这仍然是规则所不允许的。
但是,我不建议这样做。对象有名字是有原因的。如果您在脚本中重命名它们,那么突然之间,您的脚本就与其他脚本不同了--这是一个维护问题。
相反,我建议您为表提供标准缩写(我将使用与表名中每个单词的第一个字母相关的缩写)。在引用这些表的每个查询中,请使用表别名。然后,开始更改所有其他脚本以使用相同的别名。
不要无缘无故地使你的脚本与其他脚本不同。它们都是同一系统的一部分,随着时间的推移,应该使用相同的约定来实现可维护性。
https://stackoverflow.com/questions/49896952
复制相似问题