如何重命名其中包含连字符的表名 - SQL Server 2008 R2

时间:2016-02-18 17:43:42

标签: sql-server sql-server-2008 rename

我的数据库中有一个表格显示为"revised-alert"(带双引号)。显而易见的是,连字符不应该用在表名中,但是我已经吸取了教训,但我希望继续重命名或从中获取数据并放弃它。

尝试重命名表并查询表时出现以下错误:

重命名错误消息:

  

错误:没有名称的项目   'DB_12345_dev.dbo。“修订警报”'可以在当前找到   数据库'DB_12345_dev',假设@itemtype输入为'(null)'。   错误代码:15225

exec sp_rename
  @objname = 'DB_12345_dev.dbo."revised-alert"',
  @newname = 'revisedalert'

QUERY ERROR MESSAGE:

  

错误:无效的对象名称“DB_12345_dev.dbo.revised-alert”。错误   代码:208

select *
from DB_12345_dev.dbo."revised-alert"

3 个答案:

答案 0 :(得分:1)

我在我的测试实例中创建了一个"revised-alert"表,然后运行了profiler来捕获执行的命令,如果我通过右键单击重命名表 - >在SSMS中重命名。看起来您可能需要在包含引号的名称周围添加对象分隔符[ ]

/* create a test table for demonstration purposes */
select 1 as val into dbo.["revised-alert"]

/* select to show table exists */
select * from dbo.["revised-alert"]

EXEC dbo.sp_rename @objname = N'[dbo].["revised-alert"]', @newname = N'revisedalert', @objtype = N'OBJECT'

/* select from renamed table */
select * from dbo.revisedalert

答案 1 :(得分:0)

您是否尝试过以下操作:

exec sp_rename @objname = 'DB_12345_dev.dbo.[revised-alert]', @newname = 'revisedalert'

答案 2 :(得分:0)

如果您只想从此表中获取数据,那么您可以使用简单的

来完成
select * from "revised-alert"

OR 最好使用此

创建一个包含“modified-alert”中所有数据的新表
select * into NewTable from "revised-alert"