SQL
Zapytanie, które użyłem to:
ALTER TABLE oldtable RENAME TO newtable;
Ale daje mi błąd.
Serwer: Msg 156, poziom 15, stan 1, wiersz 1
Niepoprawna składnia w pobliżu słowa kluczowego „TO”.
SQL
Zapytanie, które użyłem to:
ALTER TABLE oldtable RENAME TO newtable;
Ale daje mi błąd.
Serwer: Msg 156, poziom 15, stan 1, wiersz 1
Niepoprawna składnia w pobliżu słowa kluczowego „TO”.
Odpowiedzi:
Aby zmienić nazwę tabeli w SQL Server, użyj sp_rename
polecenia:
exec sp_rename 'schema.old_table_name', 'new_table_name'
'NewName'
polu, w przeciwnym razie twoja tabela może wyglądać podobnie dbo.dbo.NewName
.
CREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
Aby zmienić nazwę kolumny:
sp_rename 'table_name.old_column_name', 'new_column_name' , 'COLUMN';
Aby zmienić nazwę tabeli:
sp_rename 'old_table_name','new_table_name';
Korzystając ze sp_rename, która działa jak w powyższych odpowiedziach, sprawdź także, które obiekty ulegają zmianie po zmianie nazwy, które odwołują się do tej tabeli, ponieważ musisz je również zmienić
Wziąłem przykład kodu dla zależności tabeli na blogu Pinal Dave tutaj
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'
Dlatego wszystkie te zależne obiekty również wymagają aktualizacji
Lub użyj jakiegoś dodatku, jeśli możesz, niektóre z nich mają funkcję zmiany nazwy obiektu, a wszystkie zależą również od obiektów
Jeśli spróbujesz exec sp_rename
otrzymać błąd LockMatchID, może pomóc najpierw dodać instrukcję use [baza danych]:
próbowałem
exec sp_rename '[database_name].[dbo].[table_name]', 'new_table_name';
-- Invalid EXECUTE statement using object "Object", method "LockMatchID".
To, co musiałem zrobić, aby to naprawić, to przepisać na:
use database_name
exec sp_rename '[dbo].[table_name]', 'new_table_name';
Nazwa tabeli
sp_rename 'db_name.old_table_name', 'new_table_name'
Kolumna
sp_rename 'db_name.old_table_name.name' 'userName', 'COLUMN'
Indeks
sp_rename 'db_name.old_table_name.id', 'product_ID', 'INDEX'
dostępne również dla statystyk i typów danych
Oto, czego używam:
EXEC sp_rename 'MyTable', 'MyTableNewName';
Nic z tego nie działało. Więc po prostu umieściłem dane w nowej tabeli
SELECT *
INTO [acecodetable].['PSCLineReason']
FROM [acecodetable].['15_PSCLineReason'];
może przyda się komuś ...
W moim przypadku nie rozpoznałem nowego schematu, a właściciel był również dbo.
AKTUALIZACJA
EXECUTE sp_rename N'[acecodetable].[''TradeAgreementClaim'']', N'TradeAgreementClaim';
Pracował dla mnie. Znalazłem go ze skryptu wygenerowanego automatycznie podczas aktualizacji PK dla jednej z tabel. W ten sposób rozpoznał także nowy schemat.
Aby zmienić nazwę tabeli za pomocą innego schematu:
Przykład: Zmień dbo.MyTable1 na wrk.MyTable2
EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'
ALTER SCHEMA wrk TRANSFER dbo.MyTable2
.
w sobie, użyj jej[]
wokół nazwy tabeli. (Wiem, wiem, ale kropki mogą się zdarzyć ...) Np.sp_rename '[Stupid.name]', 'NewName'
Lub ze schematemsp_rename '[dbo.Stupid.name]', 'NewName'