在SQL Server中重命名列的问题

时间:2011-03-16 18:35:41

标签: sql-server-2005

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

什么是正确的语法?

4 个答案:

答案 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

它将解决您的问题