【发布时间】:2014-01-30 19:06:59
【问题描述】:
我创建了一个这样的全局临时表 -
CREATE TABLE ##BigTable
(Nos varchar(10) null)
然后尝试像这样重命名 Nos 列 -
EXEC sp_RENAME '##BigTable.Nos' , 'Numbers', 'COLUMN'
我收到了错误 -
Either the parameter @objname is ambiguous or the
claimed @objtype (COLUMN) is wrong.
为什么会发生这种情况,我该如何解决这个问题?
与问题不完全相关的额外内容,仅供参考。
我想添加这个 - 我尝试使用完全限定的来创建全局临时表 像这样的名字 -
CREATE TABLE [NotMyTempDataBase].[dbo].[##BigTable]
(Nos varchar(10) null)
然后,我尝试使用 - 重命名它
EXEC tempdb.sys.sp_rename N'[NotMyTempDataBase].[dbo].[##BigTable].Nos',
N'Numbers', N'COLUMN';
错误 - 限定的@oldname 引用了当前数据库以外的数据库。
这是错误的。我意识到临时表是在系统数据库 tempdb 中创建的,即使您在创建它时指定了另一个数据库名称。
改用这个 -
CREATE TABLE [tempdb].[dbo].[##BigTable]
(Nos varchar(10) null)
--SQL 服务器消息:忽略数据库名称“tempdb”,引用 tempdb 中的对象。
EXEC tempdb.sys.sp_rename N'[tempdb].[dbo].[##BigTable].Nos',
N'Numbers', N'COLUMN';
【问题讨论】:
-
顺便说一句,出于好奇,您真的要将数字存储在
varchar列中吗?如果有,为什么? -
@AndriyM - 不。这只是演示问题的一个例子。
标签: sql sql-server sql-server-2008 sql-server-2005