在SQL Server中重命名列的问题

vin*_*ani 4 sql-server-2005

所以我试图将表格中的列重命名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]它也没有那样工作.

什么是正确的语法?

Mar*_*ith 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 
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,因此这不依赖于您在会话设置中启用此功能.