我该如何解决“参数@objname不明确或声明的@objtype(COLUMN)错误。”?

问题描述:

如果我尝试执行以下查询:我该如何解决“参数@objname不明确或声明的@objtype(COLUMN)错误。”?

EXEC sp_rename 'ENG_TEst.[ENG_Test_A/C_TYPE]', 'ENG_Test_AC_TYPE', 'COLUMN' 

我得到一个错误:

Either the [email protected] is ambiguous or the claimed @objtype (COLUMN) is wrong.

我该如何解决呢?

+2

向我们展示'ENG_MYTALLY'的定义 – egrunin 2010-06-22 08:56:10

+0

在我的情况下,我得到了这个错误,因为我尝试更新的表名不存在。 – Samuel 2013-05-27 21:06:27

+0

这是由于类名(模型)名称的冲突,当自动创建表和... – 2015-02-16 17:23:09

坚果。几周前,我也遇到了同样的错误,在浪费了大量时间之后,我想到了如何让它发挥作用 - 但我忘记了它。 (没有太大的帮助,除了说是的,它可以完成。)

您是否尝试过不同的括号组合,或使用和不使用括号?例如

EXEC sp_rename 'ENG_TEst.ENG_Test_A/C_TYPE', 'ENG_Test_AC_TYPE', 'COLUMN'; 
EXEC sp_rename '[ENG_TEst].[ENG_Test_A/C_TYPE]', 'ENG_Test_AC_TYPE', 'COLUMN'; 
EXEC sp_rename '[ENG_TEst].[ENG_Test_A/C_TYPE]', '[ENG_Test_AC_TYPE]', 'COLUMN'; 
EXEC sp_rename '[ENG_TEst].ENG_Test_A/C_TYPE', 'ENG_Test_AC_TYPE', 'COLUMN'; 

如果一切都失败了,总是有

  • 用适当的名称
  • 复制数据在从旧表
  • 删除旧表
  • 创建新表(如 “xENG_TEst”)将新表重命名为最终名称
+3

对我来说第二个选项的工作 – 2013-11-03 14:13:11

+1

我刚刚得到了Op的错误本身。当我再次运行sp_rename时,我得到了正确的错误:对象'BlahColumnID'无法重命名,因为对象参与强制依赖关系。就我而言,这是因为BlahColumnID参与了计算列功能。 – AlwaysLearning 2014-03-10 05:12:23

+1

对我来说,我不得不在第二个建议的语法前加上'[dbo] .':[[dbo]。[ENG_TEst]。[ENG_Test_A/C_TYPE]'。我特别的问题是使用实体框架的RenameColumn(),虽然它是sp_rename的包装。 – levininja 2015-04-01 15:52:43

您是否在正确的数据库中运行查询?即

Use MyDatabase; 
GO 
EXEC sp_rename 'ENG_TEst.[ENG_Test_A/C_TYPE]', 'ENG_Test_AC_TYPE', 'COLUMN'; 
GO 

我也有这个问题 - 非常讨厌,还没有找到一个令人满意的sql答案(除了涉及创建临时表等冗长的问题),我没有时间去探索它,结果我会喜欢。

最后,只需使用SQL Server Management Studio通过选择表,右键单击列并点击重命名即可。 简单!

显然我宁愿知道如何做到没有gui但有时你只是得让sh **完成!

+0

您可以单击工具栏中的“脚本”图标查看SSMS如何执行它! – 2011-03-25 12:00:26

+0

@MartinSmith你可以让SSMS编写通过对象浏览器重命名列的动作吗?我无法弄清楚如何。我能想到的唯一方法是使用SQL Profiler来追踪它,但这很重要。 – 2013-03-06 17:36:46

+1

@IainElder - 您可以,但您需要在设计视图中打开表格,然后重命名该列,然后编写更改。如果你直接在树视图中重命名列,那么它只是没有给它脚本编写的机会。 – 2013-03-06 17:56:07

以下两项工作(as discussed here)。

exec sp_rename 'ENG_TEst.[[ENG_Test_A/C_TYPE]]]' , 
       'ENG_Test_A/C_TYPE', 'COLUMN' 


exec sp_rename 'ENG_TEst."[ENG_Test_A/C_TYPE]"' , 
       'ENG_Test_A/C_TYPE', 'COLUMN' 

这工作

EXEC sp_rename 
@objname = 'ENG_TEst."[ENG_Test_A/C_TYPE]"', 
@newname = 'ENG_Test_A/C_TYPE', 
@objtype = 'COLUMN' 
+1

我认为objectname应该是objname – curiousBoy 2014-02-05 21:58:15

只是尝试删除链接到该列的统计指标。

最好的问候。

更新代码第一个MVC5数据库时出现此错误。从我的数据库中删除(右键单击,删除)所有表格,并从Migration文件夹中删除迁移对我有用。

我就遇到了这个今天得到它一起工作:

EXECUTE sp_rename N'dbo.table_name.original_field_name', N'new_field_name', 'COLUMN' 

为了得到这个语法,我跟着上面马丁·史密斯的建议 - 在设计视图中打开表,重命名列,然后单击表设计师|生成更改脚本。这产生低于该做的重命名脚本分为两步:

/* To prevent any potential data loss issues, you should review this script in 
    detail before running it outside the context of the database designer.*/ 
BEGIN TRANSACTION 
SET QUOTED_IDENTIFIER ON 
SET ARITHABORT ON 
SET NUMERIC_ROUNDABORT OFF 
SET CONCAT_NULL_YIELDS_NULL ON 
SET ANSI_NULLS ON 
SET ANSI_PADDING ON 
SET ANSI_WARNINGS ON 
COMMIT 
BEGIN TRANSACTION 
GO 
EXECUTE sp_rename N'dbo.table_name.original_field_name', N'Tmp_new_field_name_1', COLUMN' 
GO 
EXECUTE sp_rename N'dbo.table_name.Tmp_new_field_name_1', N'new_field_name', 'COLUMN' 
GO 
ALTER TABLE dbo.table_name SET (LOCK_ESCALATION = TABLE) 
GO 
COMMIT 
+0

其次,对于SSMS不提供改变脚本的情况,即改变索引;在重命名时运行SQL分析器跟踪,以查看它生成的脚本。 – 2014-03-11 10:45:53

我试着在这个网站每一个可能的解决方案并没有什么工作适合我。我最终做了设计模式。右键单击表名称,然后单击设计。然后我改了名字并保存在这里。工作简单。