sp_rename (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечную точку аналитики SQL Azure Synapse Analytics в хранилище Microsoft Fabric в Microsoft Fabric
Изменяет имя пользовательского объекта в текущей базе данных. Этот объект может быть таблицей, индексом, столбцом, типом данных псевдонима или Корпорацией Майкрософт
платформа .NET Framework определяемый пользователем тип среды CLR.
Внимание
Некоторые системные объекты и синтаксис Transact-SQL не поддерживаются в бессерверных пулах SQL в Azure Synapse Analytics, включая эту статью. Дополнительные сведения см . в службе поддержки T-SQL.
Внимание
Изменение любой части имени объекта может разрушить скрипты и хранимые процедуры. Мы рекомендуем не использовать эту инструкцию для переименования хранимых процедур, триггеров, определяемых пользователем функций или представлений; Вместо этого удалите объект и повторно создайте его с новым именем.
Соглашения о синтаксисе Transact-SQL
Синтаксис
Синтаксис для sp_rename
SQL Server и База данных SQL Azure:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]
Синтаксис для sp_rename
(предварительная версия) в Azure Synapse Analytics:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
, [ @objtype = ] 'COLUMN'
Синтаксис для sp_rename
Microsoft Fabric:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
[ , [ @objtype = ] 'OBJECT' ]
Аргументы
[ @objname = ] 'object_name'
Текущее или неквалифицированное имя объекта пользователя или типа данных. Если объект, который необходимо переименовать, является столбцом в таблице, object_name должен находиться в таблице формы.column или schema.table.column. Если объект, который нужно переименовать, является индексом, object_name должен находиться в таблице.index формы или schema.table.index. Если объект, который нужно переименовать, является ограничением, object_name должен находиться в форме schema.constraint.
Кавычки необходимы, только если указан объект с полным именем. Если предоставлено полное имя таблицы, включая имя базы данных, в качестве последнего должно использоваться имя текущей базы данных. object_name — nvarchar(776) без значения по умолчанию.
[ @newname = ] 'new_name'
Новое имя указанного объекта. new_name должно быть именем одной части и должно соответствовать правилам идентификаторов. newname — sysname, без значения по умолчанию.
Имена триггеров не могут начинаться с #или ##.
Применимо к хранилищу в Microsoft Fabric:
- Имена схем не могут содержать
/
или\
заканчиваться ими.
. - Имена таблиц не могут содержать
/
или\
заканчиваться ими.
.
[ @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. |
Область применения: Azure Synapse Analytics
- В
sp_rename
(предварительной версии) для Azure Synapse AnalyticsCOLUMN
является обязательным значением, указывающим, что тип объекта, который необходимо переименовать, является столбцом, и всегда должен быть включен в инструкциюsp_rename
. Столбец можно переименовать только в том случае, если он не является столбцом распространения.sp_rename
можно использовать только для переименованияCOLUMN
объекта пользователя.
Область применения: Microsoft Fabric
- В
sp_rename
хранилище в Microsoft FabricOBJECT
поддерживается только для @objtype. - В
sp_rename
конечной точке аналитики SQL в Microsoft FabricOBJECT
используется единственное поддерживаемое значение для @objtype. Таблицы нельзя переименовать.
Значения кода возврата
0
(успешно) или ненулевое число (сбой).
Замечания
Применяется к SQL Server (все поддерживаемые версии) и База данных SQL Azure:
sp_rename
автоматически переименовывает связанный индекс при переименовании ограничения PRIMARY KEY или UNIQUE. Если переименованный индекс привязан к ограничению PRIMARY KEY, ограничение PRIMARY KEY также автоматически переименовываетсяsp_rename
.sp_rename
можно использовать для переименования первичных и вторичных XML-индексов.Переименование хранимой процедуры, функции, представления или триггера не изменит имя соответствующего объекта в столбце определения представления каталога sys.sql_modules или полученного с помощью встроенной функции OBJECT_DEFINITION . Поэтому рекомендуется
sp_rename
не использовать для переименования этих типов объектов. Лучше удалить и создать объект повторно с новым именем.
Применяется к SQL Server (все поддерживаемые версии), База данных SQL Azure и Azure Synapse Analytics:
Переименование объекта, например таблицы или столбца, не будет автоматически переименовать ссылки на этот объект. Необходимо вручную изменить любые объекты, которые ссылаются на переименованный объект. Например, если переименован столбец таблицы и на этот столбец имеется ссылка в триггере, то необходимо изменить триггер, указав новое имя столбца. Используйте sys.sql_expression_dependencies , чтобы составить список зависимостей для объекта перед его переименованием.
Переименование столбца не обновляет метаданные для любых объектов, которые SELECT всех столбцов (с помощью
*
) из этой таблицы не обновляются. Например, если переименовать столбец таблицы и этот столбец ссылается на представление или функцию, не привязанную к схеме, все столбцы (с помощью*
), метаданные представления или функции продолжают отражать исходное имя столбца. Обновите метаданные с помощью sp_refreshsqlmodule или sp_refreshview.Изменить имя объекта или типа данных можно только в текущей базе данных. Имена большинства системных типов данных и системных объектов нельзя изменить.
Если для нового имени используется более 128 символов, используются только первые 128 символов, а остальные усечены.
Применимо к Azure Synapse Analytics:
- В Azure Synapse Analytics
sp_rename
доступна предварительная версия для выделенных пулов SQL.
Разрешения
Для переименования объектов, столбцов и индексов требуется разрешение ALTER на объект. Для переименования определенных пользователем типов требуется разрешение CONTROL на тип. Чтобы переименовать базу данных, требуется членство в предопределенных ролях сервера sysadmin или dbcreator . Чтобы переименовать таблицу реестра, требуется разрешение ALTER LEDGER.
Примеры
А. Переименование таблицы
В следующем примере столбец SalesTerritory
в таблице SalesTerr
переименовывается в Sales
.
USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO
B. Переименование столбца
В следующем примере столбец в таблице переименовывается TerritoryID
SalesTerritory
TerrID
в .
USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
C. Переименование индекса
В следующем примере индекс IX_ProductVendor_VendorID
переименовывается в IX_VendorID
.
USE AdventureWorks2022;
GO
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
GO
D. Переименование типа данных псевдонима
В следующем примере псевдоним типа данных Phone
переименовывается в Telephone
.
USE AdventureWorks2022;
GO
EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';
GO
Е. Ограничения переименования
Следующие примеры иллюстрируют переименование ограничения PRIMARY KEY, ограничения CHECK и ограничения FOREIGN KEY. При переименовании ограничения должна быть указана схема, к которой принадлежит ограничение.
USE AdventureWorks2022;
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.
EXEC sp_rename 'HumanResources.PK_Employee_BusinessEntityID', 'PK_EmployeeID';
GO
-- Rename a check constraint.
EXEC sp_rename 'HumanResources.CK_Employee_BirthDate', 'CK_BirthDate';
GO
-- Rename a foreign key constraint.
EXEC 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');
GO
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)
F. Переименование статистики
В следующем примере создается объект статистики с именем contactMail1
, а затем переименовывает статистику NewContact
на использование sp_rename
. При переименовании статистики объект должен быть указан в формате "schema.table.statistics_name".
CREATE STATISTICS ContactMail1
ON Person.Person (BusinessEntityID, EmailPromotion)
WITH SAMPLE 5 PERCENT;
EXEC sp_rename 'Person.Person.ContactMail1', 'NewContact','Statistics';
Примеры: Azure Synapse Analytics
G. Переименование столбца
В следующем примере столбец в таблице переименовывается c1
table1
col1
в .
Примечание.
Эта функция Azure Synapse Analytics по-прежнему доступна в предварительной версии для выделенных пулов SQL и в настоящее время доступна только для объектов в схеме dbo
.
CREATE TABLE table1 (c1 INT, c2 INT);
EXEC sp_rename 'table1.c1', 'col1', 'COLUMN';
GO
H. Переименование объекта
В следующем примере таблица dbo.table1
dbo.table2
OBJECT
переименовывается в тип.
EXEC sp_rename @objname = 'dbo.table1', @newname = 'table2', @objtype = 'OBJECT';