SQL Server에서 테이블 이름을 바꾸는 방법은 무엇입니까?


369

SQL내가 사용하는 것을 쿼리는 다음과 같습니다

ALTER TABLE oldtable RENAME TO newtable;

그러나 오류가 발생합니다.

서버 : 메시지 156, 수준 15, 상태 1, 줄 1
키워드 'TO'근처의 구문이 잘못되었습니다.

답변:


683

SQL Server에서 테이블 이름을 바꾸려면 다음 sp_rename명령을 사용하십시오 .

exec sp_rename 'schema.old_table_name', 'new_table_name'

7
한 가지 더 : 테이블 이름에 테이블 이름이 있으면 테이블 이름 주위 .에 사용 []하십시오. (나는 알고 있지만, 점은 발생할 수있다 ...) 예를 들어 sp_rename '[Stupid.name]', 'NewName'또는 스키마sp_rename '[dbo.Stupid.name]', 'NewName'
vacip

55
또한 실수로 스키마를 필드 에 넣지 마십시오'NewName' . 그렇지 않으면 테이블이 다음과 같이 보일 수 dbo.dbo.NewName있습니다.
Michael Plautz

4
테이블 이름을 바꿀 때 저장 프로 시저, 뷰, 함수 등에 존재할 수있는 해당 테이블에 대한 참조 이름도 거의 변경 하려는 경우가 많습니다 . 빠른 Google은이를 수행 할 수있는 많은 도구 중 하나를 찾을 수 있습니다. . 또는 이러한 모든 개체에서 지정된 문자열을 찾아서 ALTER 문으로 붙여넣고 찾기 및 바꾸기를 수행 한 다음 모두 실행하는 스크립트를 사용할 수 있습니다.
MGOwen

2
새 테이블을 가리키는 이전 테이블 이름의 이름으로 동의어를 작성할 수도 있습니다CREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
Ruskin

대괄호 안에 새 이름을 넣지 마십시오! 그렇지 않으면 테이블 이름에 대괄호가 붙습니다. 'new_table_name'-맞습니다. '[new_table_name]'-문제가 생길 것입니다
VeganHunter


14

위의 답변과 같이 작동하는 sp_rename을 사용하는 경우 이름을 변경 한 후 해당 테이블을 참조하는 이름이 변경된 개체도 확인해야합니다.

나는 PINAL 데이브의 블로그에서 테이블 종속성에 대한 코드 예제를했다 여기

USE AdventureWorks
GO
SELECT
referencing_schema_name = SCHEMA_NAME(o.SCHEMA_ID),
referencing_object_name = o.name,
referencing_object_type_desc = o.type_desc,
referenced_schema_name,
referenced_object_name = referenced_entity_name,
referenced_object_type_desc = o1.type_desc,
referenced_server_name, referenced_database_name
--,sed.* -- Uncomment for all the columns
FROM
sys.sql_expression_dependencies sed
INNER JOIN
sys.objects o ON sed.referencing_id = o.[object_id]
LEFT OUTER JOIN
sys.objects o1 ON sed.referenced_id = o1.[object_id]
WHERE
referenced_entity_name = 'Customer'

따라서 이러한 모든 종속 개체도 업데이트해야합니다.

또는 가능한 경우 일부 추가 기능을 사용하십시오. 일부 추가 기능은 개체의 이름을 바꾸는 기능이 있으며 모든 개체는 의존합니다.


11

exec sp_renameLockMatchID 오류를 수신 하려고 시도하면 먼저 use [database] 문을 추가하는 것이 도움이 될 수 있습니다.

나는 시도했다

 exec sp_rename '[database_name].[dbo].[table_name]', 'new_table_name';
 -- Invalid EXECUTE statement using object "Object", method "LockMatchID".

내가 그것을 고치기 위해해야했던 일은 그것을 다시 쓰는 것이 었습니다.

use database_name
exec sp_rename '[dbo].[table_name]', 'new_table_name';

10

테이블 이름

sp_rename 'db_name.old_table_name', 'new_table_name'

기둥

sp_rename 'db_name.old_table_name.name' 'userName', 'COLUMN'

인덱스

sp_rename 'db_name.old_table_name.id', 'product_ID', 'INDEX'

정적 및 데이터 유형에도 사용 가능


2
열의 경우 첫 번째 매개 변수와 두 번째 매개 변수 사이에 쉼표가 없습니다. 그것은해야한다 : sp_rename을 'db_name.old_table_name.name', '사용자 이름', 'COLUMN'
sebastian.roibu


0

여기에 제안 된 것에서 아무것도 작동하지 않았습니다. 그래서 데이터를 새로운 테이블에 넣었습니다.

SELECT * 
INTO [acecodetable].['PSCLineReason']
FROM [acecodetable].['15_PSCLineReason'];

누군가에게 도움이 될 것입니다 ..

내 경우에는 새로운 스키마를 인식하지 못했지만 dbo는 소유자였습니다.

최신 정보

EXECUTE sp_rename N'[acecodetable].[''TradeAgreementClaim'']', N'TradeAgreementClaim';

나를 위해 일했다. 테이블 중 하나에 대한 PK를 업데이트 할 때 자동으로 생성 된 스크립트에서 발견했습니다. 이런 식으로 새 스키마도 인식했습니다 ..


0

다른 스키마로 테이블 이름을 변경하려면 다음을 수행하십시오.

예 : dbo.MyTable1을 wrk.MyTable2로 변경하십시오.

EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'

ALTER SCHEMA wrk TRANSFER dbo.MyTable2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.