gpt4 book ai didi

sql - 无法重命名临时表的列

转载 作者:行者123 更新时间:2023-12-02 10:45:04 25 4
gpt4 key购买 nike

我创建了一个像这样的全局临时表 -

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';

最佳答案

好的,所以实际的解决方案是:

EXEC tempdb.sys.sp_rename N'##BigTable.Nos', N'Numbers', N'COLUMN';

由于 #temp 表(甚至是 ##global 临时表)位于 tempdb 中,因此您需要在那里调用 sp_rename

但需要考虑的进一步问题:

  • 你到底为什么要使用##global临时表?您知道这实际上将并发限制为 ONE,对吗?你认为当两个用户同时调用这段代码时会发生什么?也许您想在此处使用#local 临时表,或者完全避免#temp 表。

  • 为什么需要在脚本中途更改列名称?要么一开始就正确命名,要么继续引用旧名称。脚本后来如何知道你更改了名字?出于什么目的?

关于sql - 无法重命名临时表的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21465349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com