同义词,而不将它们添加到数据库中或整个脚本的别名



我正在编写一个长脚本来在数据库之间迁移数据,有人告诉我我不能使用同义词,因为它们是全局的,可能会弄乱其他脚本。我被告知使用完全限定的表名或别名或同义词以外的其他东西。但我认为一定有更好的方法。

有没有办法使用可以有效地称为"同义词"的东西,但实际上没有创建真正的同义词?还是仅创建脚本本地的同义词?或者有没有办法将表名别名的范围扩展到整个脚本,这样我就不必在每次插入/选择中都编写它们?

这一切都是为了将长表名称(其中一些达到 70 个字符(转换为短的 3-6 个字符,以大大提高脚本的可读性。

同义词不是全局的,而是架构的一部分。它们指向服务器-数据库-模式-对象的四部分名称。因此,您可以仅为脚本创建一个新数据库,并在那里创建同义词:

create database MyScriptDb;
create synonym tbl1 for realdb.dbo.VeryLongTableName;

只要没有其他脚本使用MyScryptDb,就很难看出它们会受到怎样的影响。

这太长了,无法发表评论。

一种可能性是在脚本开头创建同义词,然后在所有退出路径上删除它们。 也许这仍然是规则不允许的。

但是,我不建议这样做。 对象具有名称是有原因的。 如果在脚本中重命名它们,那么突然之间,您的脚本与其他脚本不同 - 这是一个维护问题。

相反,我建议您为表格提供标准缩写(我会使用与表格名称中每个单词的第一个字母相关的内容(。 在引用表的每个查询中,使用表别名。 然后,开始更改所有其他脚本以使用相同的别名。

不要无端地让你的剧本与其他剧本不同。 它们都是同一系统的一部分,并且随着时间的推移应使用相同的约定来实现可维护性。

最新更新