我一直认为T-SQL中的同义词只是一个方便的缩写。然而,当我做以下事情时......
为T_SHORT_NAMES_BACKUP创建同义词BACKUP_TABLE 去
选择* 进入BACKUP_TABLE 来自T_SHORT_NAMES
...我得到的错误是已经存在一个名为BACKUP_TABLE的对象。我做错了吗?
答案 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