열 SQL Server 2008 이름 바꾸기


653

SQL Server 2008과 Navicat을 사용하고 있습니다. SQL을 사용하여 테이블의 열 이름을 바꿔야합니다.

ALTER TABLE table_name RENAME COLUMN old_name to new_name;

이 문장은 작동하지 않습니다.



5
이것은 스웨덴과 연결된 질문 # 174582의 복제본이 아닙니다.이 질문은 MS SQL에 국한되며 데이터베이스에 무관합니다.

답변:


1195

사용하다 sp_rename

EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'

참조 : SQL 서버 - 기둥 이름이나 테이블 이름의 이름을 변경하는 방법

설명서 : sp_rename (Transact-SQL)

귀하의 경우 다음과 같습니다.

EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'

작은 따옴표를 사용하여 값을 묶어야합니다.


24
SQL Server는 [[[NewColumnName]]]을 새 열의 이름으로 사용하므로 NewColumnName을 괄호 안에 넣지 마십시오. 또한 sp_rename은 EXEC 또는 EXECUTE로 시작해야합니다.
Mark Freeman

29
첫 번째 매개 변수에 대괄호를 사용하여 열을 식별하지만 두 번째 매개 변수에는 괄호를 넣을 수 없습니다. 이처럼 :EXEC sp_RENAME '[TableName].[OldColumnName]', 'NewColumnName', 'COLUMN'
닐스 Brinch

2
이 저장 프로 시저 핸들의 디폴트 값은 널 (null) 등 당신의 대답에주의해야한다 제약 조건이 일반에 반대, 이름 변경을하는 동안 alter table등의 제약이 존재하는 경우 실패합니다.
Tuncay Göncüoğlu

4
'table_name.new_name'을 사용하면 [schema]. [table_name]. [table_name.new_name]이되므로 해당 테이블 이름을 새 이름에 넣지 마십시오. (이 답변에서 정확하고 친구들에게 메모를 추가하십시오)
Mark Schultheiss

1
스키마는 데이터베이스에있는 경우 당신은 테이블 이름 앞에 스키마 이름을 추가해야한다 EXEC sp_rename을 'schema_name.table_name.old_name', 'NEW_NAME', 'COLUMN'
아민

106

또는 SQLMicrosoft SQL Server Management Studio에서이 작업을 수행 할 수 있습니다. GUI를 사용하는 몇 가지 빠른 방법은 다음과 같습니다.

첫 번째 방법

열을 천천히 두 번 클릭하십시오. 열 이름은 편집 가능한 텍스트 상자가됩니다.


두 번째 방법

열을 마우스 오른쪽 버튼으로 클릭하고 상황에 맞는 메뉴에서 이름 바꾸기를 선택하십시오.

예를 들면 다음과 같습니다.

열 이름을 바꾸려면


세번째 방법

이 방법은 여러 열의 이름을 한 번에 바꾸어야하는 경우에 적합합니다.

  1. 이름을 변경해야하는 열이 포함 된 테이블을 마우스 오른쪽 단추로 클릭하십시오.
  2. 디자인을 클릭하십시오 .
  3. 테이블 디자인 패널에서 변경하려는 열 이름의 텍스트 상자를 클릭하고 편집하십시오.

예를 들면 다음과 같습니다. MSSMS 테이블 디자인 예

참고 : OP가 SQL 솔루션을 구체적으로 요구한다는 것을 알고 있습니다.


1
또는 사용자에게 권한이 없습니다.
캐리 켄달

6
절대 그렇게하지 마십시오. 테이블을 복사 한 다음 이전 테이블을 삭제하고 이름을 바꾸는 중입니다. 테이블에 대해 아무것도 변경하기 위해 절대 GUI를 사용하지 마십시오.
HLGEM

6
@HLGEM 그것은 꽤 큰 담요 진술입니다. 어쨌든 설명한 내용에 대한 자료를 제공 할 수 있습니까? 즉 테이블을 떨어 뜨리는 등
캐리 켄달

2
@CarrieKendall, GUI 대신 변경 사항을 스크립트로 작성하면 알 수 있습니다. 이것이 sp_rename 또는 alter table을 사용하는 것보다 GUI를 사용하여 대형 테이블을 변경하는 것이 훨씬 느린 이유입니다. 또한 데이터베이스 구조의 변경은 코드 변경이며 다른 코드와 마찬가지로 소스 제어에 있어야하므로 스크립트에 있어야합니다. 이는 스크립트가 필요하기 때문에 개발 프로덕션 데이터베이스 권한으로 테이블을 변경할 수없는 경우에 특히 중요합니다. 또한 제품에 수백만 개의 레코드가있는 테이블을 복사, 삭제 및 재생성하는 것을 원하지 않습니다.
HLGEM

18
방금 프로파일 러가 실행중인 Management Studio를 사용하여 SQL Server 2012 테이블의 이름을 변경했으며 sp_rename을 사용했습니다. 그래도 이전 버전에서는 말할 수 없습니다.
Steve Dowling

58

시험:

EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN'

27

테이블의 스키마를 지정해야합니다. 그렇지 않으면이 오류가 발생할 수 있습니다.

메시지 15248, 수준 11, 상태 1, 절차 sp_rename, 줄 238 @objname 매개 변수가 모호하거나 청구 된 @objtype (COLUMN)이 잘못되었습니다.

배포 스크립트 인 경우 추가 보안을 추가하는 것이 좋습니다.

IF EXISTS (
        SELECT 1
        FROM sys.columns
        WHERE
            name = 'OldColumnName' AND
            object_name(object_id) = 'TableName'
    ) AND
    NOT EXISTS (
        SELECT 1
        FROM sys.columns
        WHERE
            name = 'NewColumnName' AND
            object_name(object_id) = 'TableName'
    )
    EXEC sp_RENAME 'SchemaName.TableName.OldColumnName', 'NewColumnName', 'COLUMN';

이 안전한 접근 방식이 마음에 들어 다른 환경에서 실행되거나 실행되지 않을 수있는 마이그레이션을 작성하는 데 좋습니다.
Adil H. Raza

존재 확인과 같은 다른 스크립트의 일부로
괜찮은

19

이미 내장 함수를 사용하는 것이 좋지만 다른 방법은 다음과 같습니다.

  1. 동일한 데이터 유형 및 새 이름을 가진 새 열을 작성하십시오.
  2. UPDATE / INSERT 문을 실행하여 모든 데이터를 새 열에 복사하십시오.
  3. 이전 열을 삭제하십시오.

를 사용하면 얻을 수있는 이점 sp_rename은 이와 관련된 모든 관계를 처리한다는 것입니다.

로부터 문서 :

sp_rename은 PRIMARY KEY 또는 UNIQUE 제약 조건의 이름이 바뀔 때마다 연결된 인덱스의 이름을 자동으로 바꿉니다. 이름이 바뀐 인덱스가 PRIMARY KEY 제약 조건에 연결되어 있으면 PRIMARY KEY 제약 조건도 sp_rename에 의해 자동으로 이름이 바뀝니다. sp_rename을 사용하여 기본 및 보조 XML 인덱스의 이름을 바꿀 수 있습니다.


새로운 열에서 허용 할 * 스텝 1 NULL이있다 * 선택적으로는 NULL 값을 허용하지 않는, 새로운 열을 변경하는 단계를 추가 넷째
BitLauncher

16

sp_rename열 이름을 바꾸는 데 사용할 수 있습니다 .

USE YourDatabase;  
GO  
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';  
GO  

첫 번째 파라미터가 수정 될 수있는 객체이다 번째 파라미터는 오브젝트에 대하여 설명한다 새 이름이며, 세번째 파라미터 알리는 바꾸기를위한 것임을 서버 column와 같은 이름을 사용할 수있다 tables, index그리고 alias data type.


2
sp_rename ...에 대해 언급 한 5 개 중 4 개를 넘어서서도 새 답변을 추가해야하는 이유를 이해하지 못합니까?
Pawel Czapski 2016 년

3
어떤 시점에서, 누군가가 여기에 매개 변수의 동작을 설명 할 것, 아무도이하지 않았다
알렉상드르 Neukirchen에게

1
예, 실제로 당신이 옳습니다. 나에게는 너무 분명하지만 새로운 젊은이에게는 그렇지 않을 수도 있습니다.
Pawel Czapski 2016 년

12

나는 종종 여기에 와서 대괄호를 사용하는 방법을 궁금해하기 때문에이 대답은 나와 같은 사람들에게 유용 할 수 있습니다.

EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN'; 
  • OldColumnName없어야합니다 []. 이거 작동 안 할거야.
  • 넣지 마십시오 NewColumnName으로 [], 그것은으로 발생합니다 [[NewColumnName]].

3

Sql Server Management Studio에는 시스템 정의 저장 프로 시저 (SP)가 있습니다.이
중 하나는 열의 이름을 바꾸는 데 사용됩니다. SP는 sp_rename입니다.

구문 : sp_rename '[table_name] .old_column_name', 'new_column_name'
자세한 내용은이 문서를 참조하십시오. sp_rename by Microsoft Docs

참고 : 이 SP를 실행하면 SQL 서버는 ' 주의 : 개체 이름의 일부를 변경하면 스크립트 및 저장 프로 시저가 손상 될 수 있습니다 '라는 경고 메시지를 표시 합니다 . 이것은 열과 관련된 자체 sp를 작성한 경우에만 중요합니다 표에서 변경하려고합니다.


2

@Taher의 개선 된 버전

DECLARE @SchemaName AS VARCHAR(128)
DECLARE @TableName AS VARCHAR(128)
DECLARE @OldColumnName AS VARCHAR(128)
DECLARE @NewColumnName AS VARCHAR(128)
DECLARE @ParamValue AS VARCHAR(1000)

SET @SchemaName = 'dbo'
SET @TableName = 'tableName'
SET @OldColumnName = 'OldColumnName'
SET @NewColumnName = 'NewColumnName'
SET @ParamValue = @SchemaName + '.' + @TableName + '.' + @OldColumnName

IF EXISTS
(
    SELECT 1 FROM sys.columns WHERE name = @OldColumnName AND OBJECT_NAME(object_id) = @TableName
)
AND NOT EXISTS
(
    SELECT 1 FROM sys.columns WHERE name = @NewColumnName AND OBJECT_NAME(object_id) = @TableName
)
BEGIN
    EXEC sp_rename @ParamValue, @NewColumnName, 'COLUMN';
END

0

또는 SQL Management Studio에서 열을 두 번 느리게 클릭하고 UI를 통해 이름을 바꿀 수 있습니다.


-1

쿼리 실행 :

    SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'

많은 투표로 오래 지속되는 기존 답변을 반복하지 마십시오.
TT.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.