Відповіді:
Для перейменування таблиці в 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, яке працює, як у наведених вище відповідях, перевірте також, на які об’єкти впливає після перейменування, посилайтеся на цю таблицю, тому що вам також потрібно змінити
Я взяв приклад коду для залежностей таблиць в блозі 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'
Отже, всі ці залежні об'єкти також потрібно оновлювати
Або скористайтеся якоюсь надбудовою, якщо можете, деякі з них мають функцію перейменування об'єкта, і все також залежить від введення об’єктів
Якщо ви спробуєте 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';
Назва таблиці
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';
Працювали для мене. Я знайшов це зі скрипту, створеного автоматично під час оновлення ПК для однієї з таблиць. Таким чином він розпізнав і нову схему ..
Щоб змінити назву таблиці за допомогою іншої схеми:
Приклад: Змініть dbo.MyTable1 на wrk.MyTable2
EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'
ALTER SCHEMA wrk TRANSFER dbo.MyTable2
.
в собі, використовуйте[]
навколо назви таблиці. (Я знаю, я знаю, але крапки можуть трапитися ...) Напр.sp_rename '[Stupid.name]', 'NewName'
Або зі схемоюsp_rename '[dbo.Stupid.name]', 'NewName'