所以我试图将表格中的列从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, 过程sp_rename,第213行 参数@objname是不明确的或 声称的@objtype(COLUMN)是 错。
我试图改变表删除列分配详细信息。[Conversion_Fee]它也没有那样工作。
什么是正确的语法?
答案 0 :(得分:7)
/*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,因此这不依赖于您在会话设置中启用此功能。
答案 1 :(得分:4)
没关系我发现了:
ALTER TABLE dbo.AllocationDetails
DROP COLUMN [[Conversion_Fee]]]
OR
sp_RENAME 'dbo.AllocationDetails.[[Conversion_Fee]]]' , 'Conversion_Fee', 'COLUMN'
这些都可行。 :)
使用双引号:
exec sp_rename 'dbo.AllocationDetails."[Conversion_Fee]"' , 'Conversion_Fee', 'COLUMN'
也会奏效。
答案 2 :(得分:3)
解决此问题:
sp_RENAME 'dbo.AllocationDetails.[[Conversion_Fee]]]' , 'Conversion_Fee', 'COLUMN'
答案 3 :(得分:0)
一起运行以下查询。
USE [DATABASE_NAME];
GO
EXEC sp_rename '[SCHEMA_NAME].[TABLE_NAME].OLD_COLUMN_NAME', 'NEW_COLUMN_NAME', 'COLUMN';
GO
它将解决您的问题