sp_rename (Transact-SQL)
Применимо к: SQL Server (все поддерживаемые версии)
База данных SQL Azure
Azure Synapse Analytics
Изменяет имя пользовательского объекта в текущей базе данных. Этот объект может быть таблицей, индексом, столбцом, типом данных псевдонима или определяемым пользователем типом среды CLR (Microsoft платформа .NET Framework clR).
Примечание
В Azure Synapse Analytics sp_rename находится в предварительной версии для выделенных пулов SQL и может использоваться только для переименования столбца в объекте пользователя.
Внимание!
Изменение любой части имени объекта может разрушить скрипты и хранимые процедуры. Не рекомендуется использовать эту инструкцию для переименования хранимых процедур, триггеров, определяемых пользователем функций или представлений; следует удалить объект и создать его повторно с новым именем.
Синтаксические обозначения в 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_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 (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
Б. Переименование столбца
В следующем примере столбец таблицы переименовывается 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.
CREATE STATISTICS ContactMail1
ON Person.Person (BusinessEntityID, EmailPromotion)
WITH SAMPLE 5 PERCENT;
sp_rename 'Person.Person.ContactMail1', 'NewContact','Statistics';
Примеры: Azure Synapse Analytics
Ж. Переименование столбца
В следующем примере столбец в table1
таблице переименовывается c1
col1
в .
Примечание
Эта функция 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)