所以我试图将表格中的列重命名Conversion_Fee_PerShare为just Conversion Fee.
我在网上查了一下,发现语法是:
sp_RENAME 'TableName.[OldColumnName]', '[NewColumnName]', 'COLUMN'
Run Code Online (Sandbox Code Playgroud)
我把我的查询写成:
sp_RENAME 'dbo.AllocationDetails.[Conversion_Fee_Per_Share]' , '[Conversion_Fee]', 'COLUMN'
Run Code Online (Sandbox Code Playgroud)
列名现在已成为[Conversion_Fee]而不是Conversion_Fee
现在如果我想再次重命名,就像这样:
sp_RENAME 'dbo.AllocationDetails.[Conversion_Fee]' , 'Conversion_Fee', 'COLUMN'
Run Code Online (Sandbox Code Playgroud)
它给我一个错误说:
消息15248,级别11,状态1,过程sp_rename,行213参数@objname不明确或声明的@objtype(COLUMN)错误.
我试图改变表删除列AllocationDetails.[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
Run Code Online (Sandbox Code Playgroud)
在第二次sp_rename调用中使用的列名是由返回的SELECT QUOTENAME('[Conversion_Fee_Per_Share]').
或者更直接地可以使用
EXEC sp_rename
'dbo.AllocationDetails."[Conversion_Fee]"',
'Conversion_Fee',
'COLUMN'
Run Code Online (Sandbox Code Playgroud)
QUOTED_IDENTIFIER 对于该存储过程始终设置为on,因此这不依赖于您在会话设置中启用此功能.