Зміна ширини стовпця


39

Чи збільшиться ширина стовпця (nvarchar) обов'язково занести таблицю?

Іншими словами, чи можна змінювати ширину у виробничому середовищі з активними користувачами?

Я подумав, що якщо розмір збільшується (на відміну від зменшення), це не буде проблемою.

Відповіді:


52

Якщо ви робите це через оператор T-SQL, як, наприклад, нижче, то жодне падіння таблиці не відбудеться, і ви можете сміливо робити це у виробничому середовищі:

alter table <table> alter column <column> nvarchar(biggernumber) [not] null

Якщо ви робите це через графічний інтерфейс дизайну SSMS, це залежатиме від того, який сценарій він вирішить використовувати для впровадження змін. Іноді він буде вставляти дані у тимчасову таблицю, видаляти початкову таблицю, створювати нову версію цієї таблиці та вставляти її назад у нову. Простий спосіб дізнатися, що вона буде робити, це натиснути кнопку "Створити сценарій" і подивитися на T-SQL, який він планує виконати.


1
Я подумав, що навіть кнопка "Створити сценарій" видає попередження про те, що ви збираєтеся кинути таблицю, перш ніж навіть покажуть вам сценарій.
Нік Шамма

1
Він дійсно видаляє помилку, але насправді не запускає скрипт, поки ви не натиснете на кнопку OK (або запустити чи що завгодно) на вікні зі сценарієм. Ви можете скопіювати сценарій та скасувати вікно, в якому відображається сценарій.
mrdenny

але чи працює вона, кажучи про зміну від float до десяткової (n, n)?
Nishanth Shaan

Який ефект це має, якщо таблиця повторюється? Я припускаю, що таблиці абонентів не оновлюються автоматично?
tmwoods

18

Збільшення ширини nvarcharстовпця стовпця не потребує падіння таблиці. Ні одна ALTER TABLEоперація. Детальну інформацію про обмеження при зміні властивостей таблиці або стовпців ви можете прочитати в операторі ALTER TABLE .

Я скопіював найбільш релевантні частини із нижченаведеної документації:

Зміна розміру стовпчика

Ви можете змінити довжину, точність або масштаб стовпця, вказавши новий розмір для типу даних стовпця в пункті ALTER COLUMN. Якщо дані існують у стовпці, новий розмір не може бути меншим за максимальний розмір даних. Крім того, стовпець не може бути визначений в індексі, якщо стовпець не тип вархара, nvarchar або варбінарних даних і індекс не є результатом обмеження PRIMARY KEY. Див. Приклад P.

Замки та АЛЬТЕР ТАБЛИЦЯ

Зміни, зазначені в ALTER TABLE, вводяться негайно. Якщо для змін потрібні зміни рядків у таблиці, ALTER TABLE оновлює рядки. ALTER TABLE отримує замок для модифікації схеми на столі, щоб переконатися, що під час зміни немає ніяких інших посилань на посилання навіть на метадані для таблиці, за винятком онлайнових операцій з індексом, які потребують дуже короткого блокування SCH-M в кінці. Під час операції «ALTER TABLE… SWITCH» блокування отримується як у вихідних, так і в цільових таблицях. Зміни, внесені до таблиці, записуються в систему та повністю підлягають відновленню. Зміни, які стосуються всіх рядків у дуже великих таблицях, наприклад, випадання стовпця або додавання стовпця NOT NULL за замовчуванням, може зайняти тривалий час для заповнення та генерації багатьох записів журналу. Ці заяви ALTER TABLE повинні виконуватися з такою ж обережністю, як і будь-які INSERT, UPDATE,


Також чудова відповідь. Але я міг вибрати лише одну. Дякую!
Фернандо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.