【问题标题】:Using a synonym in a make-table query ("select into")在生成表查询中使用同义词(“select into”)
【发布时间】:2014-09-18 19:30:04
【问题描述】:

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

为 T_SHORT_NAMES_BACKUP 创建同义词 BACKUP_TABLE 去

选择 * 进入 BACKUP_TABLE 来自 T_SHORT_NAMES

...我收到错误消息,即已经存在一个名为 BACKUP_TABLE 的对象。我是不是做错了什么?

【问题讨论】:

    标签: tsql synonym select-into


    【解决方案1】:

    同义词是指向其他 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

    现在,回到您的问题。您为指向T_SHORT_NAMES_BACKUPBACKUP_TABLE 创建同义词。

    试试:SELECT * FROM BACKUP_TABLE

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

    【讨论】:

      【解决方案2】:

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

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

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

      insert into
          T_SHORT_NAMES_BACKUP
      
      select
          *
      
      from
          T_SHORT_NAMES
      

      【讨论】:

      • 好的,这回答了我的问题:您不能在生成表查询中使用同义词。但我认为 SSMS 可以区分同义词对象和表对象。无论如何,我确实需要一个同义词。脚本中有几个查询,每个查询都使用名称“T_SHORT_NAME_Backup”,该名称每周都会更改。我不想更改此名称的所有实例。
      • 好的,那么只需更改语句的顺序即可。首先使用 select ... into ... 将备份创建到具有新对象名称的新表中,然后为该表对象创建同义词。
      • 好答案。我想这是我能希望的最好的了。我每周还有两行要更改,而不是一个,但你不能全部拥有!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多