Поделиться через


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 Analytics COLUMN является обязательным значением, указывающим, что тип объекта, который необходимо переименовать, является столбцом, и всегда должен быть включен в инструкцию sp_rename . Столбец можно переименовать только в том случае, если он не является столбцом распространения. sp_rename можно использовать только для переименования COLUMN объекта пользователя.

Область применения: Microsoft Fabric

  • В sp_rename хранилище в Microsoft Fabric OBJECT поддерживается только для @objtype.
  • В sp_rename конечной точке аналитики SQL в Microsoft Fabric OBJECT используется единственное поддерживаемое значение для @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

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

В следующем примере индекс 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.table2OBJECT переименовывается в тип.

EXEC sp_rename @objname = 'dbo.table1', @newname = 'table2', @objtype = 'OBJECT';