没有将它们添加到数据库的同义词或整个脚本的别名

时间:2018-04-18 10:07:50

标签: sql sql-server alias synonym

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

有没有办法使用可以被有效调用的内容"同义词",但没有实际创建真正的同义词?或者只在我的脚本本地创建同义词?或者有没有办法将表名别名的范围扩展到整个脚本,所以我不必在每个插入/选择中写入它们?

这一切都是为了将​​长表名称中的一些变为70个字符到3-6个字符之间,以大大提高脚本的可读性。

2 个答案:

答案 0 :(得分:0)

Synonyms不是全局的,而是模式的一部分。对于server-database-schema-object,它们指向四部分名称。因此,您可以为脚本创建一个新数据库,并在那里创建同义词:

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

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

答案 1 :(得分:0)

评论太长了。

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

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

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

不要无偿地让你的脚本与其他脚本不同。它们都是同一系统的一部分,并且应该使用相同的约定来保持可维护性。