sp_rename(Transact-SQL)

적용 대상: SQL Server(지원되는 모든 버전) Azure SQL Database Azure Synapse Analytics

현재 데이터베이스에 있는 사용자가 만든 개체의 이름을 변경합니다. 이 개체는 테이블, 인덱스, 열, 별칭 데이터 형식 또는 Microsoft

CLR(공용 언어 런타임) 사용자 정의 형식을 .NET Framework.

참고

Azure Synapse Analytics sp_rename 에서는 전용 SQL 풀용 미리 보기에 있으며 사용자 개체의 COLUMN 이름을 바꾸는 데만 사용할 수 있습니다.

중요

일부 시스템 개체 및 Transact-SQL 구문은 이 문서를 포함하여 Azure Synapse Analytics의 서버리스 SQL 풀에서 지원되지 않습니다. 자세한 내용은 T-SQL 지원을 참조하세요.

주의

개체 이름의 일부를 변경하면 스크립트나 저장 프로시저가 작동되지 않을 수 있습니다. 이 문을 사용하여 저장 프로시저, 트리거, 사용자 정의 함수 또는 뷰의 이름을 변경하지 않는 것이 좋습니다. 대신 개체를 삭제하고 새로운 이름으로 다시 만듭니다.

Transact-SQL 구문 규칙

구문

SQL Server 및 Azure SQL Database의 구문sp_rename:

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

Azure Synapse Analytics의 (미리 보기) 구문 sp_rename :

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

인수

[ @objname = ] 'object_name'

사용자 개체 또는 데이터 형식의 현재 정규화 또는 정규화되지 않은 이름입니다. 이름을 바꿀 개체가 테이블의 열인 경우 object_name table.column 또는 schema.table.column 형식이어야 합니다. 이름을 바꿀 개체가 인덱스인 경우 object_nametable.index 또는 schema.table.index 형식이어야 합니다. 이름을 바꿀 개체가 제약 조건인 경우 object_nameschema.constraint 형식이어야 합니다.

정규화된 개체가 지정된 경우에는 따옴표만 필요합니다. 데이터베이스 이름을 포함한 정규화된 이름인 경우 반드시 현재 데이터베이스의 이름을 사용해야 합니다. object_namenvarchar(776)이며 기본값은 없습니다.

[ @newname = ] 'new_name'

지정된 개체의 새 이름입니다. new_name 한 부분으로 된 이름이어야 하며 식별자에 대한 규칙을 따라야 합니다. newname 은 기본값이 없는 sysname입니다.

참고

트리거 이름은 # 또는 ##로 시작될 수 없습니다.

[ @objtype = ] 'object_type'

이름을 바꿀 개체의 형식입니다. object_typevarchar(13)이며 기본값은 NULL이며 이러한 값 중 하나일 수 있습니다.

Description
COLUMN 이름을 바꿀 열입니다.
DATABASE 사용자 정의 데이터베이스입니다. 이 개체 유형은 데이터베이스 이름을 바꿀 경우 필요합니다.
INDEX 사용자 정의 인덱스입니다. 통계가 포함된 인덱스의 이름을 바꾸면 통계 이름도 자동으로 바뀝니다.
OBJECT sys.objects에서 추적된 형식의 항목입니다. 예를 들어 OBJECT는 제약 조건(CHECK, FOREIGN KEY, PRIMARY/UNIQUE KEY), 사용자 테이블 및 규칙을 포함하는 개체의 이름을 바꿀 때 사용될 수 있습니다.
STATISTICS 적용 대상: SQL Server 2012(11.x) 이상 및 Azure SQL Database.

사용자가 명시적으로 만들었거나 인덱스를 통해 암시적으로 만들어진 통계입니다. 인덱스의 통계 이름을 바꾸면 인덱스 자체도 자동으로 이름이 바뀝니다.
USERDATATYPE CREATE TYPE 또는 sp_addtype 실행하여 추가된 CLR 사용자 정의 형식입니다.

[ @objtype = ] 'COLUMN'

적용 대상: Azure Synapse Analytics

Azure Synapse Analytics의 (미리 보기)에서 sp_renameCOLUMN은 이름을 바꿀 개체 형식이 열임을 지정하는 필수 매개 변수입니다. 기본값이 없는 varchar(13) 이며 항상 (미리 보기) 문에 sp_rename 포함되어야 합니다. 열은 배포되지 않는 열인 경우에만 이름을 바꿀 수 있습니다.

반환 코드 값

0(성공) 또는 0이 아닌 수(실패)

설명

SQL Server(지원되는 모든 버전) 및 Azure SQL 데이터베이스에 적용됩니다.

  • sp_rename은 PRIMARY KEY 또는 UNIQUE 제약 조건의 이름을 바꿀 때마다 연결된 인덱스의 이름을 자동으로 바꿉니다. 이름이 바뀐 인덱스가 PRIMARY KEY 제약 조건에 연결된 경우 PRIMARY KEY 제약 조건의 이름도 로 자동으로 바뀝 sp_rename니다.

  • sp_rename을 사용하여 기본 XML 인덱스 및 보조 XML 인덱스의 이름을 변경할 수 있습니다.

  • 저장 프로시저, 함수, 뷰 또는 트리거의 이름을 바꾸면 sys.sql_modules 카탈로그 뷰의 정의 열에 있거나 OBJECT_DEFINITION 기본 제공 함수를 사용하여 가져온 해당 개체의 이름이 변경되지 않습니다. 따라서 이러한 개체 형식의 sp_rename 이름을 바꾸는 데 사용하지 않는 것이 좋습니다. 대신 해당 개체를 삭제하고 새로운 이름으로 다시 만듭니다.

SQL Server(지원되는 모든 버전), Azure SQL 데이터베이스 및 Azure Synapse 분석에 적용됩니다.

  • 테이블 또는 열과 같은 개체의 이름을 바꾸면 해당 개체에 대한 참조의 이름이 자동으로 바뀌지 않습니다. 이름을 변경한 개체를 참조하는 개체는 수동으로 수정해야 합니다. 예를 들어 테이블 열의 이름을 변경하고 이 열이 트리거에서 참조되는 경우 트리거를 수정하여 새로운 열 이름을 적용해야 합니다. sys.sql_expression_dependencies 를 사용하여 이 개체에 종속된 개체를 나열한 다음 개체의 이름을 변경할 수 있습니다.

  • 열 이름을 바꾸면 해당 테이블의 모든 열(* 사용)을 선택하는 개체에 대한 메타데이터가 자동으로 업데이트되지 않습니다. 예를 들어 테이블 열의 이름을 바꾸고 해당 열이 모든 열(* 사용)을 선택하는 스키마 바인딩되지 않은 보기 또는 함수에서 참조되는 경우 보기 또는 함수의 메타데이터는 원래 열 이름을 계속 반영합니다. sp_refreshsqlmodule 또는 sp_refreshview를 사용하여 메타데이터를 새로 고칩니다.

  • 현재 데이터베이스에서만 개체 또는 데이터 형식의 이름을 변경할 수 있습니다. 대부분의 시스템 데이터 형식 및 시스템 개체의 이름은 변경할 수 없습니다.

사용 권한

개체, 열 및 인덱스의 이름을 변경하려면 개체에 대한 ALTER 권한이 필요합니다. 사용자 유형의 이름을 변경하려면 유형에 대한 CONTROL 권한이 필요합니다. 데이터베이스 이름을 바꾸려면 sysadmin 또는 dbcreator 고정 서버 역할의 멤버 자격이 필요합니다. 원장 테이블의 이름을 바꾸려면 ALTER LEDGER 권한이 필요합니다.

A. 테이블 이름 바꾸기

다음 예에서는 SalesTerritory 스키마에 있는 SalesTerr 테이블의 이름을 Sales 로 바꿉니다.

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

B. 열 이름 바꾸기

다음 예제에서는 테이블TerrIDTerritoryID 열 이름을 로 SalesTerritory 바꿉니다.

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

C. 인덱스 이름 바꾸기

다음 예에서는 IX_ProductVendor_VendorID 인덱스의 이름을 IX_VendorID로 변경합니다.

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

D. 별칭 데이터 형식 이름 바꾸기

다음 예에서는 Phone 별칭 데이터 형식의 이름을 Telephone으로 변경합니다.

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

E. 제약 조건 이름 바꾸기

다음 예에서는 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.
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이라는 통계 개체를 만든 다음 를 사용하여 sp_rename통계 이름을 NewContact로 바꿉니다. 통계 이름을 바꾸면 개체를 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. 열 이름 바꾸기

다음 예제에서는 테이블col1c1 열 이름을 로 table1 바꿉니다.

참고

이 Azure Synapse Analytics 기능은 전용 SQL 풀에 대해 아직 미리 보기로 제공되며 현재 dbo 스키마의 개체에만 사용할 수 있습니다.

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

참고 항목