SQL
Запрос , который я использовал это:
ALTER TABLE oldtable RENAME TO newtable;
Но это дает мне ошибку.
Сервер: сообщение 156, уровень 15, состояние 1, строка 1
Неверный синтаксис рядом с ключевым словом «TO».
SQL
Запрос , который я использовал это:
ALTER TABLE oldtable RENAME TO newtable;
Но это дает мне ошибку.
Сервер: сообщение 156, уровень 15, состояние 1, строка 1
Неверный синтаксис рядом с ключевым словом «TO».
Ответы:
Чтобы переименовать таблицу в SQL Server, используйте sp_rename
команду:
exec sp_rename 'schema.old_table_name', 'new_table_name'
'NewName'
поле, иначе ваша таблица может выглядеть примерно так dbo.dbo.NewName
.
CREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
Чтобы переименовать столбец:
sp_rename 'table_name.old_column_name', 'new_column_name' , 'COLUMN';
Чтобы переименовать таблицу:
sp_rename 'old_table_name','new_table_name';
При использовании sp_rename, который работает как в приведенных выше ответах, проверьте также, какие объекты затрагиваются после переименования, которые ссылаются на эту таблицу, потому что их тоже нужно изменить
Я взял пример кода для табличных зависимостей в блоге Пинала Дейва здесь
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'
Таким образом, все эти зависимые объекты должны быть обновлены также
Или используйте некоторые надстройки, если вы можете, некоторые из них имеют функцию для переименования объекта, и все также зависят от объектов.
Если вы попытаетесь exec sp_rename
получить ошибку LockMatchID, это может помочь сначала добавить оператор 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';
Имя таблицы
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'
также доступны для статики и типов данных
Это то, что я использую:
EXEC sp_rename 'MyTable', 'MyTableNewName';
Ничто не сработало из предложенного здесь .. Так что просто поместил данные в новую таблицу
SELECT *
INTO [acecodetable].['PSCLineReason']
FROM [acecodetable].['15_PSCLineReason'];
может быть кому то пригодится ..
В моем случае он не распознал новую схему, а dbo был владельцем ..
ОБНОВИТЬ
EXECUTE sp_rename N'[acecodetable].[''TradeAgreementClaim'']', N'TradeAgreementClaim';
Работал на меня. Я нашел это из скрипта, сгенерированного автоматически при обновлении PK для одной из таблиц. Таким образом, он также распознал новую схему.
.
в себе, используйте[]
вокруг имени таблицы. (Я знаю, я знаю, но точки могут произойти ...) Например,sp_rename '[Stupid.name]', 'NewName'
или со схемойsp_rename '[dbo.Stupid.name]', 'NewName'