【问题标题】:Error when creating Synonym in SQL Server 2016 with the same table name在 SQL Server 2016 中使用相同的表名创建同义词时出错
【发布时间】:2017-07-21 17:31:44
【问题描述】:

我们为特定年份的数据库创建了同义词,即 DST2016。我想为 2017 年的数据库创建同义词,即 DST2017,以便我们所有的工作都自动指向 2017 年。

当我运行命令时 create synonym ABS for [DST2017].[dbo].[ABS] 我收到以下错误:

数据库中已经有一个名为“ABS”的对象。

知道如何解决这个问题吗?

【问题讨论】:

  • 先去掉 2016 的同义词?
  • @james z 我试过了。工作正常。但是现在有一个新问题。我创建同义词的数据库是 CURRENTDB。它不允许我使用 [CURRENTDB] ,出现错误 ** 数据库 'CURRENTDB' 不存在。确保名称输入正确。**
  • 删除那个并在正确的数据库中创建它?检查the docs 的语法。
  • 您是否为不止一张桌子这样做?
  • @chuck 是 DST2017 数据库中的所有表

标签: sql-server synonym


【解决方案1】:

我不确定你在哪里创建了旧的(同义词),但也许你可以这样做来删除旧的:

select 'drop  synonym ' + name 
from sys.tables order by name 

然后使用这个命令来创建新的:

declare @db as varchar(50) = (select db_name())
select 'create synonym ' + name + ' for ' + @db + '.dbo.' + name 
from sys.tables order by name 

您还需要在表所在的不同数据库中,否则您将收到上述错误。

【讨论】:

  • 我们今天早上遇到的一个新问题。使用此数据库并具有 USE CURRENTDB 等命令的作业;不要运行并给出错误。为什么它期望 CURRENTDB 周围的括号 [] ?我该如何解决?谢谢!
  • 数据库 'CURRENTDB' 不存在。确保名称输入正确。
  • 更多信息可能会有所帮助。当我运行 `select * from sys.databases where name = 'CURRENTDB'' 时,我没有得到任何记录,但是当我在没有 'where' 子句的情况下运行时,我会在列表中看到它。名字里似乎有一个隐藏的字符。我正在尝试重命名数据库名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多