0

我一直认为 T-SQL 中的同义词只是一个方便的缩写。然而,当我执行以下操作时......

为 T_SHORT_NAMES_BACKUP 创建同义词 BACKUP_TABLE

从 T_SHORT_NAMES 中选择 * 进入 BACKUP_TABLE

...我收到错误消息,即已经有一个名为 BACKUP_TABLE 的对象。难道我做错了什么?

4

2 回答 2

2

一如既往select ... into ...地创建一个具有给定名称的新表对象,必须不存在具有相同名称的对象。

只需使用您的select ... into ...独立设备,无需添加同义词。

但是,如果您想添加额外的行来T_SHORT_NAMES_BACKUP代替insert into ... select ...

insert into
    T_SHORT_NAMES_BACKUP

select
    *

from
    T_SHORT_NAMES
于 2014-09-18T19:47:38.050 回答
2

同义词是指向其他 SQL 表的指针。它们非常有用,具体取决于您想要做什么。您可以将它们指向另一个数据库中的表,或另一个服务器上的表(通过链接服务器)。我们在 ETL 中大量利用它们

我用来生成我的过程:

查询以动态构建同义词

SELECT 
    'CREATE SYNONYM [dbo].[' +TABLE_NAME+ '] FOR [' + 'Put database name here or remove' + '].[dbo].['+TABLE_NAME+']'    
FROM 
    INFORMATION_SCHEMA.TABLES
WHERE 
    TABLE_TYPE = 'BASE TABLE'

从那里,你只是SELECT * FROM TABLE_NAME

现在,回到你的问题。您创建一个同义词BACKUP_TABLE指向T_SHORT_NAMES_BACKUP

尝试: SELECT * FROM BACKUP_TABLE

要了解有关同义词的更多信息:SELECT name, base_object_name FROM sys.synonyms

于 2014-09-18T19:44:07.063 回答