【问题标题】:How can I solve "Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong."? [duplicate]如何解决“参数@objname 不明确或声明的@objtype (COLUMN) 错误。”? [复制]
【发布时间】:2020-12-23 00:40:04
【问题描述】:

如果我尝试执行以下查询:

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

我得到一个错误:

参数@objname 要么是 模棱两可或声称的@objtype (COLUMN) 错误。

我该如何解决?

【问题讨论】:

  • 告诉我们ENG_MYTALLY的定义
  • 就我而言,我收到此错误是因为我尝试更新的表的名称不存在。
  • 这是因为类(模型)名称的名称冲突,当自动创建表时...
  • 错误信息可能会产生很大的误导,因为它也会在对应的表或列名不存在的情况下显示。如果您尝试连续两次执行相同的 sp_rename - 您将看到此错误,因为第一次重命名使引用列不存在。这是我的情况。
  • EXEC sp_rename '[dbo].[TableName].[OldColumnName]', 'NewColumnName', 'COLUMN';

标签: sql sql-server


【解决方案1】:

坚果。几周前我遇到了同样的错误,在浪费了很多时间之后想出了如何让它工作——但我已经忘记了。 (帮不上什么忙,除了说yes,是可以的。)

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

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”)
  • 从旧表复制数据
  • 放下旧表
  • 将新表重命名为最终名称

【讨论】:

  • 对我来说第二个选项有效
  • 我最初得到了 Op 的错误。当我再次运行 sp_rename 时,我得到了正确的错误:无法重命名对象“BlahColumnID”,因为该对象参与了强制依赖项。就我而言,这是因为 BlahColumnID 参与了计算列函数。
  • 对我来说,我必须将[dbo]. 放在第二个建议的语法前面:[dbo].[ENG_TEst].[ENG_Test_A/C_TYPE]。我的特殊问题是使用 Entity Framework 的 RenameColumn(),它是 sp_rename 的包装器。
  • 就我而言:EXEC sp_rename 'ENG_TEst."ENG_Test_A/C_TYPE"', 'ENG_Test_AC_TYPE', 'COLUMN';
【解决方案2】:

这行得通

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

【讨论】:

  • 我认为objectname应该是objname
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    我今天遇到了这个问题,并且可以使用它:

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

    为了获得这种语法,我按照上面 Martin Smith 的建议 - 在设计视图中打开表,重命名列,然后单击表设计器 |生成更改脚本。这产生了下面的脚本,它分两步进行重命名:

    /* 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
    

    【讨论】:

    • 其次,对于 SSMS 不提供更改脚本的情况,即更改索引;在重命名时运行 SQL 分析器跟踪以查看它生成的脚本。
    • 也为我工作
    【解决方案5】:

    我也遇到了这个问题——非常烦人,我自己还没有找到令人满意的 sql 答案(除了涉及创建临时表等的冗长的问题),我没有时间去探索它得出的结论会喜欢的。

    最后只是使用 SQL Server Management Studio 来完成,方法是选择表,右键单击列并点击重命名。 简单!

    显然,我宁愿知道如何在没有 gui 的情况下做到这一点,但有时你只需要完成 sh**!

    【讨论】:

    • 您可以点击工具栏中的“脚本”图标,看看SSMS是如何做到的!
    • @MartinSmith 你能否让 SSMS 脚本化通过对象资源管理器重命名列的操作?我不知道怎么做。我能想到的唯一方法是使用 SQL Profiler 来跟踪它,但这很繁重。
    • @IainElder - 你可以,但你需要在设计视图中打开表格,然后重命名列,然后编写更改脚本。如果您直接在树视图中重命名该列,那么它只会执行此操作而没有机会编写脚本。
    • @MartinSmith 谢谢!找到表,右键单击 > 设计... > 重命名列,右键单击 > 生成更改脚本... > 出现一个弹出窗口,其中包含进行更改的脚本。
    【解决方案6】:

    以下两项均有效 (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'
    

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        【解决方案8】:

        我在这个网站上尝试了所有可能的解决方案,但没有任何效果。我最终在设计模式下做。右键单击表名称,然后单击设计。然后我更改了名称并保存在这里。工作简单。

        【讨论】:

          【解决方案9】:

          只需尝试删除链接到此列的 STATISTICS INDEXES。

          最好的问候。

          【讨论】:

            猜你喜欢
            • 2013-01-28
            • 1970-01-01
            • 2020-12-11
            • 2023-02-22
            • 2017-09-11
            • 2020-08-05
            • 2020-06-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多