Як перейменувати таблицю на SQL Server?
Дізнайтеся, як перейменувати таблицю в SQL Server за допомогою оператора ALTER TABLE та ключового слова RENAME TO. Ознайомтеся з обмеженнями та можливостями перейменування таблиці в SQL Server та ознайомтеся з прикладами використання.
Зміст
У SQL Server для перейменування таблиці можна використовувати оператор ALTER TABLE із ключовим словом RENAME TO. Синтаксис команди виглядає так:
ALTER TABLE [ім'я_таблиці] RENAME TO [нове_ім'я_таблиці];
Наприклад, якщо потрібно перейменувати таблицю "Employees" на "Staff", команда буде виглядати так:
ALTER TABLE Employees RENAME TO Staff;
Після виконання цієї команди таблиця "Employees" буде перейменована на "Staff".
Джерело зображення: solutioncenter.apexsql.com
Обмеження та можливості перейменування таблиці
При перейменуванні таблиці в SQL Server слід врахувати такі обмеження та можливості:
- При перейменуванні таблиці також перейменовуються всі залежні об'єкти, такі як уявлення, процедури, що зберігаються, і функції, які використовують цю таблицю. Тому перед перейменуванням необхідно переконатись, що всі залежності оновлено відповідним чином.
- Неможливо перейменувати зовнішні таблиці, індекси та уявлення. Замість перейменування можна видалити зовнішню таблицю, індекс або подання і створити цей об'єкт повторно з новим ім'ям.
- Ви не можете перейменувати таблицю або базу даних під час використання. Для перейменування таблиці потрібно монопольне блокування таблиці. Якщо таблиця використовується, потрібно буде завершити сеанси, які використовують таблицю. Для завершення сеансу можна використовувати команду KILL. Використовуйте інструкцію KILL обережно, оскільки після завершення сеансу для всієї незафіксованої роботи буде виконано відкат. Сеанси SQL Server мають префікс "SID". У разі виклику команди KILL необхідно вказати префікс "SID" та номер сеансу.
Приклади перейменування таблиці SQL Server
Давайте розглянемо кілька прикладів перейменування таблиці SQL Server:
Приклад 1: Перейменування таблиці
Припустимо, у нас є таблиця "Employees" і ми хочемо перейменувати її на "Staff". Для цього виконаємо наступний запит:
ALTER TABLE Employees RENAME TO Staff;
Після виконання цього запиту таблицю "Employees" буде перейменовано на "Staff".
Приклад 2: Перейменування таблиці із залежними об'єктами
Припустимо, у нас є таблиця "Orders" і на неї є залежні уявлення та процедури, що зберігаються. Ми хочемо перейменувати таблицю в SalesOrders і оновити всі залежні об'єкти. Для цього виконаємо такі запити:
-- Перейменування таблиці ALTER TABLE Orders RENAME TO SalesOrders; -- Оновлення залежних уявлень EXEC sp_rename 'dbo.OldView', 'NewView'; -- Оновлення залежних збережених процедур EXEC sp_rename 'dbo.OldProcedure', 'NewProcedure';
Після виконання цих запитів таблиця "Orders" буде перейменована в "SalesOrders", а також будуть оновлені всі залежні уявлення та процедури, що зберігаються.
Приклад 3: Видалення та створення таблиці з новим ім'ям
Якщо перейменування таблиці з використанням ALTER TABLE неможливе через обмеження або залежність, можна видалити існуючу таблицю та створити нову таблицю з новим ім'ям. Наприклад, якщо у нас є таблиця "Products" і ми хочемо перейменувати її на "Items", виконаємо наступні запити:
-- Видалення існуючої таблиці DROP TABLE Products; - Створення нової таблиці з новим ім'ям CREATE TABLE Items (ItemID INT PRIMARY KEY, ItemName NVARCHAR(100), Price DECIMAL(10, 2));
Після виконання цих запитів таблицю "Products" буде видалено, а нову таблицю "Items" буде створено з необхідною структурою.
Як змінити назву таблиці SQL?
Можливо, в якийсь момент ми захочемо змінити таблицю, що вже є. Наприклад, додати або видалити стовпці, змінити тип стовпців, додати або видалити обмеження.Тобто потрібно змінити визначення таблиці. Для зміни таблиць використовується вираз ALTER TABLE.
Загальний формальний синтаксис команди виглядає так:
ALTER TABLE назва_таблиці [WITH CHECK | WITH NOCHECK]
Таким чином, за допомогою ALTER TABLE ми можемо провернути різні сценарії зміни таблиці. Розглянемо деякі з них.
Додавання нового стовпця
Додамо до таблиці Customers новий стовпець Address:
ALTER TABLE Customers ADD Address NVARCHAR(50) NULL;
У цьому випадку стовпець Address має тип NVARCHAR і визначено атрибут NULL. Але що якщо нам треба додати стовпець, який не повинен набувати значення NULL? Якщо таблиці є дані, то наступна команда нічого очікувати виконано:
ALTER TABLE Customers ADD Address NVARCHAR(50) NOT NULL;
Тому в даному випадку рішення полягає в установці значення за промовчанням через атрибут DEFAULT:
ALTER TABLE Customers ADD Address NVARCHAR(50) NOT NULL DEFAULT 'Невідомо';
У цьому випадку, якщо в таблиці вже є дані, для них для стовпця Address буде додано значення "Невідомо".
Видалення стовпця
Видалимо стовпець Address з таблиці Customers:
ALTER TABLE Customers DROP COLUMN Address;
Зміна типу стовпця
Змінимо в таблиці Customers тип даних у стовпця FirstName на NVARCHAR(200):
ALTER TABLE Customers ALTER COLUMN FirstName NVARCHAR(200);
Додавання обмеження CHECK
При додаванні обмежень SQL Server автоматично перевіряє наявні дані на відповідність обмеженням, що додаються. Якщо дані не відповідають обмеженням, такі обмеження не будуть додані. Наприклад, встановимо для стовпця Age у таблиці Customers обмеження Age > 21.
ALTER TABLE Customers ADD CHECK (Age > 21);
Якщо таблиці є рядки, у яких стовпці Age є значення, відповідні цьому обмеження, то sql-команда завершиться помилкою.Щоб уникнути подібної перевірки на відповідність і додати обмеження, незважаючи на наявність невідповідних йому даних, використовується вираз WITH NOCHECK :
ALTER TABLE Customers WITH NOCHECK ADD CHECK (Age > 21);
За замовчуванням використовується значення WITH CHECK , яке перевіряє відповідність обмеженням.
Додавання зовнішнього ключа
Нехай спочатку до бази даних буде додано дві таблиці, ніяк не пов'язані:
CREATE TABLE Customers ( Id INT PRIMARY KEY IDENTITY, Age INT DEFAULT 18, FirstName NVARCHAR(20) NOT NULL, LastName NVARCHAR(20) NOT NULL, Email VARCHAR(30) UNIQUE, Phone VARCHAR(20) UNI CREATE TABLE Orders (Id INT IDENTITY, CustomerId INT, CreatedAt Date);
Додамо обмеження зовнішнього ключа до стовпця CustomerId таблиці Orders:
ALTER TABLE Orders ADD FOREIGN KEY (CustomerId) REFERENCES Customers (Id);
Додавання первинного ключа
Використовуючи певну таблицю Orders, додамо до неї первинний ключ для стовпця Id:
ALTER TABLE Orders ADD PRIMARY KEY (Id);
Додавання обмежень з іменами
При додаванні обмежень ми можемо вказати ім'я, використовуючи оператор CONSTRAINT , після якого вказується ім'я обмеження:
ALTER TABLE Orders ADD CONSTRAINT PK_Orders_Id PRIMARY KEY (Id), CONSTRAINT FK_Orders_To_Customers FOREIGN KEY(CustomerId) REFERENCES Customers(Id); ALTER TABLE Customers ADD CONSTRAINT CK_Age_Greater_Than_Zero CHECK (Age > 0);
Видалення обмежень
Для видалення обмежень необхідно знати їхнє ім'я. Якщо ми точно не знаємо ім'я обмеження, його можна дізнатися через SQL Server Management Studio:
Розкривши вузол таблиць у підвузлі Keys можна побачити назви обмежень первинного та зовнішніх ключів. Назви обмежень зовнішніх ключів починаються з FK. А в підвузлі Constraints можна знайти всі обмеження CHECK та DEFAULT. Назви обмежень CHECK починаються з CK, а обмежень DEFAULT - з DF.
Наприклад, як видно на скріншоті, в моєму випадку ім'я обмеження зовнішнього ключа в таблиці Orders називається "FK_Orders_To_Customers". Тому для видалення зовнішнього ключа я можу використати такий вираз:
ALTER TABLE Orders DROP FK_Orders_To_Customers;
Як змінити назву таблиці SQL?
Якщо таблиця вже була створена, і її необхідно змінити, то для цього застосовується команда ALTER TABLE . Її скорочений формальний синтаксис:
ALTER TABLE назва_таблиці
Взагалі ця команда підтримує набагато більше опцій та можливостей. Усі їх можна переглянути в документації. Розглянемо лише основні сценарії, з якими ми можемо зіткнутися.
Додавання нового стовпця
Додамо до таблиці Customers новий стовпець Address:
ALTER TABLE Customers ADD Address VARCHAR(50) NULL;
У цьому випадку стовпець Address має тип VARCHAR і визначено атрибут NULL.
Видалення стовпця
Видалимо стовпець Address з таблиці Customers:
ALTER TABLE Customers DROP COLUMN Address;
Зміна значення за промовчанням
Встановимо в таблиці Customers для стовпця Age значення за замовчуванням 22:
ALTER TABLE Customers ALTER COLUMN Age SET DEFAULT 22;
Зміна типу стовпця
Змінимо в таблиці Customers тип даних стовпця FirstName на CHAR(100) і встановимо для нього атрибут NULL :
ALTER TABLE Customers MODIFY COLUMN FirstName CHAR(100) NULL;
Додавання та видалення зовнішнього ключа
Нехай спочатку до бази даних буде додано дві таблиці, ніяк не пов'язані:
CREATE TABLE Customers (Id INT PRIMARY KEY AUTO_INCREMENT, Age INT, FirstName VARCHAR(20) NOT NULL, LastName VARCHAR(20) NOT NULL); CREATE TABLE Orders (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date);
Додамо обмеження зовнішнього ключа до стовпця CustomerId таблиці Orders:
ALTER TABLE Orders ADD FOREIGN KEY (CustomerId) REFERENCES Customers (Id);
При додаванні обмежень ми можемо вказати ім'я, використовуючи оператор CONSTRAINT , після якого вказується ім'я обмеження:
ALTER TABLE Orders ADD CONSTRAINT orders_customers_fk FOREIGN KEY(CustomerId) REFERENCES Customers(Id);
У цьому випадку обмеження зовнішнього ключа називається orders_customers_fk. Потім ми можемо видалити обмеження за цим ім'ям:
ALTER TABLE Orders DROP FOREIGN KEY orders_customers_fk;
Додавання та видалення первинного ключа
Додамо до таблиці Products первинний ключ:
CREATE TABLE Products (Id INT, Model VARCHAR(20)); ALTER TABLE Products ADD PRIMARY KEY (Id);
Тепер видалимо первинний ключ:
ALTER TABLE Products DROP PRIMARY KEY;