sp_rename (Transact-SQL)

Изменяет имя пользовательского объекта в текущей базе данных. Этот объект может быть таблицей, индексом, столбцом, псевдонимом типа данных или определяемым пользователем типом среды CLR Microsoft.NET Framework.

Предупреждение

Изменение любой части имени объекта может разрушить скрипты и хранимые процедуры.Не рекомендуется использовать эту инструкцию для переименования хранимых процедур, триггеров, определяемых пользователем функций или представлений; следует удалить объект и создать его повторно с новым именем.

Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск).

Значок ссылки на раздел Синтаксические обозначения в Transact-SQL

Синтаксис

sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' 
    [ , [ @objtype = ] 'object_type' ] 

Аргументы

  • [ @objname = ] 'object_name'
    Текущее полное или неполное имя пользовательского объекта или типа данных. Если объект, который следует переименовать, представляет собой столбец в таблице, то имя object_name должно быть указано в виде table.column или schema.table.column. Если объект, который требуется переименовать, представляет собой индекс, то имя object_name должно иметь вид table.index или schema.table.index. Если объект, который требуется переименовать, представляет собой ограничение, то имя object_name должно иметь вид schema.constraint.

    Кавычки необходимы, только если указан объект с полным именем. Если предоставлено полное имя таблицы, включая имя базы данных, в качестве последнего должно использоваться имя текущей базы данных. Аргумент object_name имеет тип nvarchar(776) и не имеет значения по умолчанию.

  • [ @newname = ] 'new_name'
    Новое имя для указанного объекта. Имя new_name должно быть однокомпонентным и соответствовать правилам для идентификаторов. Аргумент newname имеет тип sysname и не имеет значения по умолчанию.

    Примечание

    Имена триггеров не могут начинаться с символов # или ##.

  • [ @objtype = ] 'object_type'
    Тип переименовываемого объекта. Аргумент object_type имеет тип varchar(13), значение по умолчанию NULL и может принимать одно из следующих значений.

    Значение

    Описание

    COLUMN

    Столбец, который будет переименован.

    DATABASE

    Пользовательская база данных. Этот тип объекта необходим при переименовании базы данных.

    INDEX

    Пользовательский индекс. При переименовании индекса со статистикой также автоматически переименовывается эта статистика.

    OBJECT

    Элемент типа, отслеживаемого в представлении sys.objects. Например, значение OBJECT может быть использовано для переименования объектов с ограничениями (CHECK, FOREIGN KEY, PRIMARY/UNIQUE KEY), пользовательских таблиц и правил.

    STATISTICS

    Статистика создается явно пользователем или неявно с индексом. При переименовании статистики для индекса также автоматически переименовывается этот индекс.

    Применимо для следующих объектов: С SQL Server 2012 по SQL Server 2014 и База данных SQL Windows Azure.

    USERDATATYPE

    Определяемые пользователем типы данных CLR, добавленные выполнением инструкции CREATE TYPE или процедуры sp_addtype.

Значения кода возврата

0 (успешное завершение) или ненулевое значение (неуспешное завершение)

Замечания

Изменить имя объекта или типа данных можно только в текущей базе данных. Имена большинства системных типов данных и системных объектов изменить нельзя.

Хранимая процедура sp_rename автоматически переименовывает связанный индекс при переименовании ограничения PRIMARY KEY или UNIQUE. Если переименованный индекс привязан к ограничению PRIMARY KEY, то ограничение PRIMARY KEY также автоматически переименовывается хранимой процедурой sp_rename.

Хранимая процедура sp_rename может использоваться для переименования первичных и вторичных XML-индексов.

Переименование хранимой процедуры, функции, представления или триггера не изменит имени соответствующего объекта в столбце definition представления каталога sys.sql_modules. Поэтому не рекомендуется использовать процедуру sp_rename для переименования объектов этих типов. Лучше удалить и создать объект повторно с новым именем.

Переименование такого объекта, как таблица или столбец не приводит к автоматическому переименованию ссылок на этот объект. Необходимо вручную изменить любые объекты, которые ссылаются на переименованный объект. Например, если переименован столбец таблицы и на этот столбец имеется ссылка в триггере, то необходимо изменить триггер, указав новое имя столбца. Используйте представление каталога sys.sql_expression_dependencies, чтобы составить список зависимостей для объекта перед его переименованием.

Разрешения

Для переименования объектов, столбцов и индексов требуется разрешение ALTER на объект. Для переименования определенных пользователем типов требуется разрешение CONTROL на тип. Для переименования базы данных необходимо быть членом предопределенной роли сервера sysadmin или dbcreator .

Примеры

А.Переименование таблицы

В следующем примере столбец SalesTerritory в таблице SalesTerr переименовывается в Sales.

USE AdventureWorks2012;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO

Б.Переименование столбца

В следующем примере столбец TerritoryID в таблице SalesTerritory переименовывается в TerrID.

USE AdventureWorks2012;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO

В.Переименование индекса

В следующем примере индекс IX_ProductVendor_VendorID переименовывается в IX_VendorID.

USE AdventureWorks2012;
GO
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
GO

Г.Переименование псевдонима типа данных

В следующем примере псевдоним типа данных Phone переименовывается в Telephone.

USE AdventureWorks2012;
GO
EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';
GO

Д.Переименование ограничений

Следующие примеры иллюстрируют переименование ограничения PRIMARY KEY, ограничения CHECK и ограничения FOREIGN KEY. При переименовании ограничения должна быть указана схема, к которой принадлежит ограничение.

USE AdventureWorks2012; 
GO
-- Return the current Primary Key, Foreign Key and Check constraints for the Employee table.
SELECT name, SCHEMA_NAME(schema_id) AS schema_name, type_desc
FROM sys.objects
WHERE parent_object_id = (OBJECT_ID('HumanResources.Employee')) 
AND type IN ('C','F', 'PK'); 
GO

-- Rename the primary key constraint.
sp_rename 'HumanResources.PK_Employee_BusinessEntityID', 'PK_EmployeeID';
GO

-- Rename a check constraint.
sp_rename 'HumanResources.CK_Employee_BirthDate', 'CK_BirthDate';
GO

-- Rename a foreign key constraint.
sp_rename 'HumanResources.FK_Employee_Person_BusinessEntityID', 'FK_EmployeeID';

-- Return the current Primary Key, Foreign Key and Check constraints for the Employee table.
SELECT name, SCHEMA_NAME(schema_id) AS schema_name, type_desc
FROM sys.objects
WHERE parent_object_id = (OBJECT_ID('HumanResources.Employee')) 
AND type IN ('C','F', 'PK'); 

name                                  schema_name        type_desc
------------------------------------- ------------------ ----------------------
FK_Employee_Person_BusinessEntityID   HumanResources     FOREIGN_KEY_CONSTRAINT
PK_Employee_BusinessEntityID          HumanResources     PRIMARY_KEY_CONSTRAINT
CK_Employee_BirthDate                 HumanResources     CHECK_CONSTRAINT
CK_Employee_MaritalStatus             HumanResources     CHECK_CONSTRAINT
CK_Employee_HireDate                  HumanResources     CHECK_CONSTRAINT
CK_Employee_Gender                    HumanResources     CHECK_CONSTRAINT
CK_Employee_VacationHours             HumanResources     CHECK_CONSTRAINT
CK_Employee_SickLeaveHours            HumanResources     CHECK_CONSTRAINT

(7 row(s) affected)

name                                  schema_name        type_desc
------------------------------------- ------------------ ----------------------
FK_Employee_ID                        HumanResources     FOREIGN_KEY_CONSTRAINT
PK_Employee_ID                        HumanResources     PRIMARY_KEY_CONSTRAINT
CK_BirthDate                          HumanResources     CHECK_CONSTRAINT
CK_Employee_MaritalStatus             HumanResources     CHECK_CONSTRAINT
CK_Employee_HireDate                  HumanResources     CHECK_CONSTRAINT
CK_Employee_Gender                    HumanResources     CHECK_CONSTRAINT
CK_Employee_VacationHours             HumanResources     CHECK_CONSTRAINT
CK_Employee_SickLeaveHours            HumanResources     CHECK_CONSTRAINT

(7 row(s) affected)

Е.Переименование статистики

В следующем примере создается объект статистики с именем contactMail1, который затем переименовывается в NewContact с помощью хранимой процедуры sp_rename. При переименовании объекта статистики его имя должно быть указано в формате schema.table.statistics_name.

Применимо для следующих объектов: SQL Server (от SQL Server 2012 до SQL Server 2014, База данных SQL Windows Azure).

CREATE STATISTICS ContactMail1
    ON Person.Person (BusinessEntityID, EmailPromotion)
    WITH SAMPLE 5 PERCENT;

sp_rename 'Person.Person.ContactMail1', 'NewContact','Statistics';

См. также

Справочник

Представление каталога sys.sql_expression_dependencies (Transact-SQL)

sys.sql_modules (Transact-SQL)

Системные хранимые процедуры (Transact-SQL)

Хранимые процедуры ядра СУБД (Transact-SQL)