未找到sp_rename对象

时间:2015-10-29 15:01:16

标签: tsql

我正在做一个数据库的重构。在这个过程中,我正在重命名一些现有的表,键和约束。它们将在新的重构表上重新创建。然后在删除旧表之前将数据移动到新表。

当我尝试使用Exec时,我有一个外键sp_rename我得到一个错误,该对象不存在。如果我尝试使用print object_id(' xxx')我什么也得不回来。它是一个有效的对象,我可以在sys.objects表中找到它。如果我尝试使用带有sys.objects表中的对象id的print Object_Name(' 123456789'),它将返回我在sp_rename中使用的名称。

任何人都知道为什么sp_rename找不到对象?

4 个答案:

答案 0 :(得分:0)

使用sp_rename类型:

EXEC dbo.sp_rename 
   'dbo.FK_FRP_File_DataMatrix',
   'FK_FRPFileID_FRPDataMatrixImportETL',
   'OBJECT';

演示:

CREATE TABLE tab1 (ID INT PRIMARY KEY,
                    col1 INT NOT NULL)
CREATE TABLE tab2 (ID INT PRIMARY KEY)

ALTER TABLE tab1
ADD CONSTRAINT FK_FRP_File_DataMatrix FOREIGN KEY (col1)
REFERENCES tab2(ID);

 EXEC dbo.sp_rename 
   'dbo.FK_FRP_File_DataMatrix',
   'FK_FRPFileID_FRPDataMatrixImportETL',
   'OBJECT';

SELECT CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS;

SqlFiddleDemo

答案 1 :(得分:0)

谢谢,但我收到此错误“参数@objname不明确或声明的@objtype(OBJECT)错误。”我相信这个问题是我在创建外键时如何使用Schema名称'dbo'。实际上是对象名称的一部分。因此,当我执行sp_rename时,它在Schema dbo中查找不存在的FK_FRP_File_DataMatrix。名称确实是对象表中的dbo.FK_FRP_File_DataMatrix。如果我手动删除dbo。从Keys下面的名称然后重命名它。需要在我的生产数据库上修复此问题。

答案 2 :(得分:0)

将约束放在表(Table1_Old)上:

ALTER TABLE dbo.Table1_Old DROP CONSTRAINT FK_Table1_Table2
GO

表格中添加带新名称的约束:

ALTER TABLE dbo.Table1_Old  WITH CHECK 
ADD  CONSTRAINT FK_Table1_Table2_Old FOREIGN KEY(FileId)
REFERENCES dbo.Table2 (FileId)
GO

现在,您可以使用Table1旧名称表(FK_Table1_Table2)上添加约束。

答案 3 :(得分:0)

如果遇到错误:

  

假设@itemtype输入为'(null)',则在当前数据库'Db'中找不到名为'dbo.table_columnId'的项目。

使用时:

sp_rename 'dbo.table_column', 'newvalue'

并且您一定要确保对象名称存在于sys.objects中,在旧名称周围使用方括号,如下所示:

sp_rename '[dbo.table_column]', 'newvalue'

原因可能是对象是在不同的架构上创建的,或者对象名称中有一个点。