sql-server-2005 - 在 SQL Server 中重命名列的问题

标签 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, Procedure sp_rename, Line 213 Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.



我试图改变表删除列分配细节。[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 

在第二个 sp_rename 调用中使用的列名是 SELECT QUOTENAME('[Conversion_Fee_Per_Share]') 返回的。

或者更直接地可以使用
EXEC sp_rename
  'dbo.AllocationDetails."[Conversion_Fee]"',
  'Conversion_Fee',
  'COLUMN'

对于该存储过程,QUOTED_IDENTIFIER 始终设置为 on,因此这不依赖于您在 session 设置中启用它。

关于sql-server-2005 - 在 SQL Server 中重命名列的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5330070/

相关文章:

sql - EXEC Select 语句与动态列将值存储到变量中

sql-server-2005 - 忽略 SQL Server 2005 中计数的时间戳

sql - SELECT MAX of COUNT

sql-server - 将数据库表从一个 SQL Server 数据库表更新到另一个?

SQL查询;水平到垂直

sql - 如何在不安装 SQL Server 2005 的情况下测试语法

sql-server-2005 - 如何在大型 SQL Server 查询中使用多核?

c# - SQL DELETE(级联 DELETE 与 TRIGGERS 与 "Manual"-DELETE)

sql-server-2005 - 在 SSRS 2005 中存储凭据

当我在数据库名称中包含数字字符时,用于创建数据库的 SQL Server 查询给我一个错误