De SQL
-query die ik heb gebruikt is:
ALTER TABLE oldtable RENAME TO newtable;
Maar ik krijg een foutmelding.
Server: Msg 156, niveau 15, staat 1, regel 1
Onjuiste syntaxis bij het zoekwoord ‘TO’.
Antwoord 1, autoriteit 100%
Als u de naam van een tabel in SQL Server wilt wijzigen, gebruikt u de sp_rename
commando:
exec sp_rename 'schema.old_table_name', 'new_table_name'
Antwoord 2, autoriteit 20%
De naam van een kolom wijzigen:
sp_rename 'table_name.old_column_name', 'new_column_name' , 'COLUMN';
De naam van een tafel wijzigen:
sp_rename 'old_table_name','new_table_name';
Antwoord 3, autoriteit 2%
Als u sp_rename gebruikt, wat werkt zoals in bovenstaande antwoorden, controleer dan ook welke objecten worden beïnvloed na het hernoemen, die verwijzen naar die tabel, want u moet die ook wijzigen
Ik heb een codevoorbeeld voor tabelafhankelijkheden genomen op Pinal Dave’s blog hier
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'
Dus al deze afhankelijke objecten moeten ook worden bijgewerkt
Of gebruik indien mogelijk een invoegtoepassing, sommige hebben een functie om objecten te hernoemen en alle afhankelijke objecten ook
Antwoord 4, autoriteit 2%
Tabelnaam
sp_rename 'db_name.old_table_name', 'new_table_name'
Kolom
sp_rename 'db_name.old_table_name.name' 'userName', 'COLUMN'
Index
sp_rename 'db_name.old_table_name.id', 'product_ID', 'INDEX'
ook beschikbaar voor statica en datatypes
Antwoord 5, autoriteit 2%
Als u exec sp_rename
probeert en een LockMatchID-fout ontvangt, kan het helpen om eerst een use [database]-instructie toe te voegen:
Ik heb het geprobeerd
exec sp_rename '[database_name].[dbo].[table_name]', 'new_table_name';
-- Invalid EXECUTE statement using object "Object", method "LockMatchID".
Wat ik moest doen om het te repareren, was het te herschrijven naar:
use database_name
exec sp_rename '[dbo].[table_name]', 'new_table_name';
Antwoord 6
Een tabelnaam wijzigen met een ander schema:
Voorbeeld: verander dbo.MyTable1 in wrk.MyTable2
EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'
ALTER SCHEMA wrk TRANSFER dbo.MyTable2
Antwoord 7
Niets werkte van hier voorgesteld ..
Dus heb de gegevens gewoon in een nieuwe tabel gepord
SELECT *
INTO [acecodetable].['PSCLineReason']
FROM [acecodetable].['15_PSCLineReason'];
misschien is het nuttig voor iemand..
In mijn geval herkende het het nieuwe schema niet, ook was de dbo de eigenaar..
UPDATE
EXECUTE sp_rename N'[acecodetable].[''TradeAgreementClaim'']', N'TradeAgreementClaim';
Werkte voor mij.
Ik vond het uit het automatisch gegenereerde script bij het bijwerken van de PK voor een van de tabellen.
Op deze manier herkende het ook het nieuwe schema..