Як перейменувати таблицю в SQL Server?


369

SQLЗапит , який я використовував це:

ALTER TABLE oldtable RENAME TO newtable;

Але, це дає мені помилку.

Сервер: Msg 156, рівень 15, стан 1, рядок 1
Неправильний синтаксис біля ключового слова "ДО".

Відповіді:


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.
Майкл Плаут

4
Майте на увазі, що перейменуючи таблицю, ви майже напевно хочете також перейменувати будь-які посилання на цю таблицю, які можуть існувати в збережених процедурах, поданнях, функціях тощо . Швидкий google може знайти один із багатьох інструментів, які можуть зробити це для вас . Або ви можете використовувати скрипт, який знаходить заданий рядок у всіх цих об'єктах, і вставити їх у вигляді ALTER-операторів, а також знайти і замінити, а потім запустити їх усі.
MGOwen

2
Ви також можете створити синонім, названий за назвою старої назви таблиці, що вказує на нову таблицюCREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
Ruskin

не розміщуйте нове ім’я у квадратних дужках! інакше таблиця матиме квадратні дужки у назві. Отже: "new_table_name" - це правильно, "[new_table_name]" - приведе вас у біду
VeganHunter

143

Щоб перейменувати стовпець:

sp_rename 'table_name.old_column_name', 'new_column_name' , 'COLUMN';

Щоб перейменувати таблицю:

sp_rename 'old_table_name','new_table_name';

Не пояснює, як обробляти схеми, відмінні від стандартного dbo.
Сал

1
@Sal Не менш, ніж будь-яка інша відповідь тут? Ви шукали, як змінити схему таблиці ?
бекон

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_renameотримати помилку LockMatchID, то це може допомогти спочатку додати оператор [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', 'userName', 'COLUMN'
sebastian.roibu


0

З запропонованого тут нічого не вийшло .. Тож просто порівнюйте дані в новій таблиці

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

можливо, буде комусь корисно ..

У моєму випадку він не розпізнав нову схему, і власник dbo був власником ..

ОНОВЛЕННЯ

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

Працювали для мене. Я знайшов це зі скрипту, створеного автоматично під час оновлення ПК для однієї з таблиць. Таким чином він розпізнав і нову схему ..


0

Щоб змінити назву таблиці за допомогою іншої схеми:

Приклад: Змініть dbo.MyTable1 на wrk.MyTable2

EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'

ALTER SCHEMA wrk TRANSFER dbo.MyTable2
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.