2011-03-16 69 views
4

所以我想从Conversion_Fee_PerShare只是Conversion Fee重命名我的表中的列。问题在SQL Server中重命名列

我在网上看了看,发现语法是:

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' 

它给了我一个错误说:

消息15248,级别11,状态1, 过程sp_rename可以,213线在任何 参数@objname不明确或 所要求的@objtype(列) 错了。

我试着改变Table Drop Column AllocationDetails。[Conversion_Fee]它没有这样工作。

请告诉我正确的语法?

回答

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' 

也会起作用。

+0

如果您发布的代码,XML或数据样本,** **请在高亮文本编辑器的线,然后单击“代码示例”按钮('{} ')在编辑器工具栏上进行恰当的格式化和语法突出显示! – 2011-03-16 19:34:26

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总是被设置为在该存储过程,这不依赖于你在你的会话设置具有这种上。

+1

@Andriy--我现在没有,但现在。 'exec sp_rename'dbo.AllocationDetails。“[Conversion_Fee]”','Conversion_Fee','COLUMN''也可以。 – 2011-03-16 20:16:31

3

要解决这个问题:

sp_RENAME 'dbo.AllocationDetails.[[Conversion_Fee]]]' , 'Conversion_Fee', 'COLUMN' 
0

运行以下查询在一起。

USE [DATABASE_NAME]; 

GO 
EXEC sp_rename '[SCHEMA_NAME].[TABLE_NAME].OLD_COLUMN_NAME', 'NEW_COLUMN_NAME', 'COLUMN'; 
GO 

这将解决您的问题