Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Преименувайте колона в SQL Server (T-SQL)

В SQL Server можете да използвате sp_rename съхранена процедура за преименуване на обект, включително колона.

Пример

Ето пример за демонстрация:

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

Това преименува колоната, наречена c1t1 таблица) до c11 .

Включително типа на обекта

Можете също да включите типа обект като трети аргумент. В този случай можем да използваме COLUMN :

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

Включително името на схемата

Можете също да квалифицирате първата колона с името на схемата, като в този случай тя може да изглежда така:

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

В този пример dbo е името на схемата, но ще трябва да използвате каквато и да е приложима схема.

Включително имената на параметрите

Както при всяка съхранена процедура, можете също да включите имената на параметрите, когато извиквате sp_rename :

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

Проверка за препратки

Когато преименувате колона в SQL Server, вероятно ще видите съобщение като това:

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

Това е така, защото когато преименувате колона, SQL Server не автоматично преименувайте всички препратки към тази колона. Това е вярно и когато преименувате таблица.

Въпреки горното предупредително съобщение, колоната все пак е преименувана.

Ако се опитаме да потърсим изглед, който препраща към преименуваната колона, получаваме грешка.

SELECT * FROM vt1;

Резултат:

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.
>

Този изглед се опитва да препраща c1 но тази колона е преименувана и така в таблицата няма колони с това име.

Определението на този изглед изглежда така:

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

Ще трябва да актуализираме този изглед, за да се позоваваме на новото име на колона. Така че можем да направим това:

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

Сега заявката към изгледа ще върне правилните данни.

Следователно, преди да преименувате колони, винаги трябва да проверявате за скриптове и съхранени процедури, които препращат към тази колона. Ще трябва да актуализирате такива скриптове и процедури, за да се позовавате на новото име на колона.

Можете да използвате sys.sql_expression_dependencies изглед на системния каталог, за да направите тази проверка.

Преименуване на изчислени колони

SQL Server не ни позволява да преименуваме изчислени колони.

Ако се опитате да преименувате изчислена колона, вероятно ще видите следното съобщение за грешка.

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

Резултат:

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'.

В този случай c3 колоната е изчислена колона, която извършва изчисление въз основа на стойност в c2 колона.

Ето какво се случва, когато се опитаме да преименуваме c2 колона.

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

Резултат:

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.

Получаваме различна грешка за тази колона. Тази грешка е, защото изчислената колона зависи от тази колона.

По принцип, за да преименуваме изчислената колона, ще трябва да я пуснем и да я добавим отново.

Пример:

ALTER TABLE t1
DROP COLUMN c3;

ALTER TABLE t1
ADD c13 AS c2 * 10;

Външни ключове

Преименуването на колона с първичен ключ не прекъсва никакви външни ключове, които препращат към тази колона.

Например, преди да преименувах t1.c1 до t1.c11 , въпреки че не го споменах, всъщност имах друга таблица и колона (t2.c2 ), който се позовава на t1.c1 .

След преименуване на t1.c1 до t1.c11 , ограничението на външния ключ на t2.c2 все още налагаше всички нови вмъквания, за да отговарят на външния ключ, въпреки че колоната с първичен ключ в другата таблица е с променено име.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Обединете стойностите на редовете в CSV (известен още като GROUP_CONCAT за SQL Server)

  2. Как да докирам/раздокарам заявката на Windows и други раздели в SQL Server Management Studio (SSMS) - SQL Server/TSQL Урок, част 21

  3. Ето три причини, поради които може да видите пикова активност във вашия SQL екземпляр

  4. Гениална помощна програма за промяна на SQL парола за нулиране на SQL парола

  5. Как да форматирате числа като валута в SQL Server (T-SQL)