sp_rename (Transact-SQL)

Применимо к:yes SQL Server (все поддерживаемые версии) YesБаза данных SQL Azure yesAzure Synapse Analytics

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

Примечание

В Azure Synapse Analytics sp_rename находится в предварительной версии для выделенных пулов SQL и может использоваться только для переименования столбца в объекте пользователя.

Внимание!

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

Topic link iconСинтаксические обозначения в Transact-SQL

Синтаксис

-- Transact-SQL Syntax for sp_rename in SQL Server and Azure SQL Database
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'   
    [ , [ @objtype = ] 'object_type' ]   
-- Transact-SQL Syntax for sp_rename (preview) in Azure Synapse Analytics
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'   
    , [ @objtype = ] 'COLUMN'   

Аргументы

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

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

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

Примечание

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

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

Значение Описание
COLUMN Столбец, который будет переименован.
DATABASE Пользовательская база данных. Этот тип объекта необходим при переименовании базы данных.
INDEX Пользовательский индекс. При переименовании индекса со статистикой также автоматически переименовывается эта статистика.
OBJECT Элемент типа, отслеживаемого в sys.objects. Например, значение OBJECT может быть использовано для переименования объектов с ограничениями (CHECK, FOREIGN KEY, PRIMARY/UNIQUE KEY) пользовательских таблиц и правил.
STATISTICS Применимо к: SQL Server 2012 (11.x) и более поздних версий и База данных SQL Azure.

Статистика создается явно пользователем или неявно с индексом. При переименовании статистики для индекса также автоматически переименовывается этот индекс.
USERDATATYPE Определяемые пользователем типы СРЕДЫ CLR, добавленные путем выполнения инструкции CREATE TYPE или sp_addtype.

[ @objtype = ] 'COLUMN' применяется к: Azure Synapse Analytics
В sp_rename (предварительная версия) для аналитики Azure Synapse COLUMN является обязательным параметром, указывающим, что переименованный тип объекта является столбцом. Это varchar(13) без значения по умолчанию и всегда должен быть включен в инструкцию sp_rename (предварительная версия). Столбец можно переименовать только в том случае, если это столбец, отличный от распределения.

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

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

Комментарии

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

Применяется к SQL Server (все поддерживаемые версии) и База данных SQL Azure
Процедура sp_rename может использоваться для переименования первичных и вторичных XML-индексов.

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

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

Применяется к SQL Server (все поддерживаемые версии), База данных SQL Azure и аналитике Azure Synapse
Изменить имя объекта или типа данных можно только в текущей базе данных. Имена большинства системных типов данных и системных объектов изменить нельзя.

Разрешения

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

Примеры

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

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

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

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

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

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.

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

Примеры: Azure Synapse Analytics

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

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

Примечание

Эта функция Azure Synapse Analytics по-прежнему доступна в предварительной версии для выделенных пулов SQL и в настоящее время доступна только для объектов в схеме dbo.

CREATE TABLE table1 (c1 INT, c2 INT);
EXEC sp_rename 'table1.c1', 'col1', 'COLUMN';
GO  

См. также:

Представление каталога sys.sql_expression_dependencies (Transact-SQL)
sys.sql_modules (Transact-SQL)
Системные хранимые процедуры (Transact-SQL)
Хранимые процедуры ядра СУБД (Transact-SQL)