Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zmień nazwę kolumny w SQL Server (T-SQL)

W SQL Server możesz użyć sp_rename procedura składowana do zmiany nazwy obiektu, w tym kolumny.

Przykład

Oto przykład do zademonstrowania:

EXEC sp_rename 't1.c1', 'c11';

Zmienia to nazwę kolumny o nazwie c1 (w t1 table) do c11 .

W tym typ obiektu

Jako trzeci argument można również dołączyć typ obiektu. W takim przypadku możemy użyć COLUMN :

EXEC sp_rename 'dbo.t1.c11', 'c1', 'COLUMN';

W tym nazwa schematu

Możesz również zakwalifikować pierwszą kolumnę nazwą schematu, w takim przypadku może to wyglądać mniej więcej tak:

EXEC sp_rename 'dbo.t1.c1', 'c11', 'COLUMN';

W tym przykładzie dbo to nazwa schematu, ale musisz użyć dowolnego schematu.

W tym nazwy parametrów

Podobnie jak w przypadku każdej procedury składowanej, można również dołączyć nazwy parametrów podczas wywoływania sp_rename :

EXEC sp_rename 
    @objname = 'dbo.t1.c1',
    @newname = 'c11',
    @objtype = 'COLUMN';

Sprawdź referencje

Gdy zmienisz nazwę kolumny w SQL Server, prawdopodobnie zobaczysz taki komunikat:

Caution: Changing any part of an object name could break scripts and stored procedures.

Dzieje się tak, ponieważ po zmianie nazwy kolumny SQL Server nie automatycznie zmień nazwy wszelkich odwołań do tej kolumny. Dotyczy to również zmiany nazwy tabeli.

Pomimo powyższego ostrzeżenia, nazwa kolumny i tak została zmieniona.

Jeśli spróbujemy wysłać zapytanie do widoku, który odwołuje się do kolumny o zmienionej nazwie, otrzymamy błąd.

SELECT * FROM vt1;

Wynik:

Msg 207, Level 16, State 1, Procedure vt1, Line 2
Invalid column name 'c1'.
Msg 4413, Level 16, State 1, Line 1
Could not use view or function 'vt1' because of binding errors.

Ten widok próbuje odwołać się do c1 ale nazwa tej kolumny została zmieniona, dlatego w tabeli nie ma kolumn o tej nazwie.

Definicja tego widoku wygląda tak:

CREATE VIEW vt1 AS
SELECT c1, c2 FROM dbo.t1;

Musielibyśmy zaktualizować ten widok, aby odwoływał się do nowej nazwy kolumny. Więc możemy to zrobić:

ALTER VIEW vt1 AS
SELECT c11, c2 FROM dbo.t1;

Teraz zapytanie o widok zwróci prawidłowe dane.

Dlatego przed zmianą nazw kolumn należy zawsze sprawdzić skrypty i procedury składowane, które odwołują się do tej kolumny. Będziesz musiał zaktualizować takie skrypty i procedury, aby odwoływały się do nowej nazwy kolumny.

Możesz użyć sys.sql_expression_dependencies widok katalogu systemowego, aby to sprawdzić.

Zmienianie nazw kolumn wyliczanych

SQL Server nie pozwala nam zmieniać nazw kolumn wyliczanych.

Jeśli spróbujesz zmienić nazwę kolumny wyliczanej, prawdopodobnie zobaczysz następujący komunikat o błędzie.

EXEC sp_rename 'dbo.t1.c3', 'c13', 'COLUMN';

Wynik:

Caution: Changing any part of an object name could break scripts and stored procedures.
Msg 4928, Level 16, State 1, Procedure sp_rename, Line 689
Cannot alter column 'c3' because it is 'COMPUTED'.

W tym przypadku c3 kolumna to kolumna obliczana, która wykonuje obliczenia na podstawie wartości w c2 kolumna.

Oto, co się dzieje, gdy próbujemy zmienić nazwę c2 kolumna.

EXEC sp_rename 'dbo.t1.c2', 'c12', 'COLUMN';

Wynik:

Msg 15336, Level 16, State 1, Procedure sp_rename, Line 563
Object 'dbo.t1.c2' cannot be renamed because the object participates in enforced dependencies.

Dla tej kolumny otrzymujemy inny błąd. Ten błąd jest spowodowany tym, że obliczona kolumna zależy od tej kolumny.

Zasadniczo, aby zmienić nazwę kolumny wyliczanej, musielibyśmy ją usunąć i dodać ponownie.

Przykład:

ALTER TABLE t1
DROP COLUMN c3;

ALTER TABLE t1
ADD c13 AS c2 * 10;

Klucze obce

Zmiana nazwy kolumny klucza podstawowego nie powoduje uszkodzenia żadnych kluczy obcych, które odwołują się do tej kolumny.

Na przykład, zanim zmieniłem nazwę t1.c1 do t1.c11 , chociaż o tym nie wspomniałem, w rzeczywistości miałem inną tabelę i kolumnę (t2.c2 ) odwołujące się do t1.c1 .

Po zmianie nazwy t1.c1 do t1.c11 , ograniczenie klucza obcego w t2.c2 nadal wymuszał zgodność nowych wstawek z kluczem obcym, mimo że nazwa kolumny klucza podstawowego w drugiej tabeli została zmieniona.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak korzystać z kreatora importu/eksportu w programie SQL Server — samouczek dotyczący SQL Server/TSQL, część 104

  2. Jak wysyłać wiadomości e-mail z serwera SQL (T-SQL)

  3. Warunkowa wydajność agregacji

  4. Konwertuj numer miesiąca na funkcję nazwy miesiąca w SQL

  5. Pobierz obraz z bazy danych w asp.net