在生成表查询中使用同义词(“select into”)

时间:2014-09-18 19:30:05

标签: tsql synonym select-into

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

为T_SHORT_NAMES_BACKUP创建同义词BACKUP_TABLE 去

选择* 进入BACKUP_TABLE 来自T_SHORT_NAMES

...我得到的错误是已经存在一个名为BACKUP_TABLE的对象。我做错了吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

由于select ... into ...总是创建一个具有给定名称的新表对象,因此必须不存在具有相同名称的对象。

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

但是,如果您想在T_SHORT_NAMES_BACKUP使用insert into ... select ...添加其他行,请改为:

insert into
    T_SHORT_NAMES_BACKUP

select
    *

from
    T_SHORT_NAMES