所以我试图将表中的一列从 Conversion_Fee_PerShare
重命名为 Conversion Fee
。
我在网上查了一下,发现语法是:
sp_RENAME 'TableName.[OldColumnName]', '[NewColumnName]', 'COLUMN'
我将查询写为:
sp_RENAME 'dbo.AllocationDetails.[Conversion_Fee_Per_Share]' , '[Conversion_Fee]', 'COLUMN'
列名现在变成了
[Conversion_Fee]
而不是 Conversion_Fee
现在,如果我想像这样再次重命名:
sp_RENAME 'dbo.AllocationDetails.[Conversion_Fee]' , 'Conversion_Fee', 'COLUMN'
它给了我一个错误说:
Msg 15248, Level 11, State 1, Procedure sp_rename, Line 213 Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.
我试图改变表删除列分配细节。[Conversion_Fee] 它也没有那样工作。
什么是正确的语法?
最佳答案
/*Initial Table*/
CREATE TABLE AllocationDetails
(
Conversion_Fee_Per_Share FLOAT
)
/*Faulty Rename*/
EXEC sp_rename
'dbo.AllocationDetails.[Conversion_Fee_Per_Share]',
'[Conversion_Fee]',
'COLUMN'
/*Fixed Rename*/
EXEC sp_rename
'dbo.AllocationDetails.[[Conversion_Fee]]]',
'Conversion_Fee',
'COLUMN'
DROP TABLE AllocationDetails
在第二个
sp_rename
调用中使用的列名是 SELECT QUOTENAME('[Conversion_Fee_Per_Share]')
返回的。或者更直接地可以使用
EXEC sp_rename
'dbo.AllocationDetails."[Conversion_Fee]"',
'Conversion_Fee',
'COLUMN'
对于该存储过程,
QUOTED_IDENTIFIER
始终设置为 on,因此这不依赖于您在 session 设置中启用它。
关于sql-server-2005 - 在 SQL Server 中重命名列的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5330070/