Зміна розміру стовпця, на який посилається схема перегляду в SQL Server


124

Я намагаюся змінити розмір стовпця на сервері sql, використовуючи:

ALTER TABLE [dbo].[Address]
ALTER COLUMN [Addr1] [nvarchar](80) NULL

де Addr1спочатку була довжина 40.

Не вдалося, підвищивши цю помилку:

The object 'Address_e' is dependent on column 'Addr1'.
ALTER TABLE ALTER COLUMN Addr1 failed because one or more objects access 
this column.

Я намагався прочитати на ньому, і, здається, тому, що деякі погляди посилаються на цей стовпець, і здається, що SQL Server насправді намагається скинути стовпець, який підняв помилку.

Address_e це представлення, створене попереднім адміністратором БД.

Чи є інший спосіб змінити розмір стовпця?


2
Address_e - це представлення, створене попереднім адміністратором БД. І як те, що згадував Ремус, він визначив СХЕМАБІНДИНГ.
Стейлен

Відповіді:


58

Погляди, ймовірно, створені за допомогою параметра "СХЕМАБІНД", і це означає, що вони явно з'єднані для запобігання таких змін. Схоже, прив'язка схеми спрацювала і заважала вам порушити ці погляди, щасливий день, так? Зверніться до адміністратора вашої бази даних і попросіть його внести зміни після того, як він виявить вплив на базу даних.

Від MSDN :

СХЕМАННЯ

Прив'язує подання до схеми нижньої таблиці або таблиць. Коли задано SCHEMABINDING, базову таблицю або таблиці не можна змінювати таким чином, що впливатиме на визначення подання. Саме визначення представлення потрібно спочатку змінити або скинути, щоб усунути залежності від таблиці, яка має бути змінена.


1
спасибі Ремус, у перегляді визначено СХЕМАБІНДИНГ. чи є який-небудь простий спосіб обійти обмеження чи мені дійсно потрібно видалити види, щоб його працювати?
Стейлен

1
Ви не можете його обійти, це все його призначення. Хтось пішов на додаткову довжину, щоб додати schemabindig, щоб запобігти змінам таблиці. Це не якась випадковість, схоже, людина знає, що робила. Ви впевнені, що хочете змінити таблицю?
Рем Русану

1
так, я впевнений =) і логічно (хоча я знаю, що це не працює таким чином) я збільшую довжину стовпця, що дійсно повинно бути добре, лише якщо стовпець не скинутий і відтворений, але на жаль, це не так ... але дякую за допомогу! = D
Стейлен

2
Я бачу ту саму проблему, і, на жаль, ми використовуємо представлення SCHEMABINDING, щоб індексувати перегляди. Тож у моєму випадку я не використовую SCHEMABINDING для явного блокування змін у базових таблицях, а лише для того, щоб відповідати вимогам SQL Server до використаних індексованих представлень. Я також хотів би обійти це, не опускаючи і не відтворюючи своїх поглядів.
jpierson

256
ALTER TABLE [table_name] ALTER COLUMN [column_name] varchar(150)

11
так, проблема була подібно до того, що згадував Ремус. немає нічого поганого в самому коді
Staelen

11
@NilRad Ummm, можливо, ви думаєте про PL-SQL? ALTER COLUMN - правильний синтаксис для SQL 2008 R2
schmidlop

4
Я щось пропускаю? Чому так багато оновлень? Це не відповідає на питання.
Енді Візендангер

13
Кількість голосів може бути, оскільки це питання є головним хітом Google для "tsql alter nvarchar length", і таким чином людей (як я), які просто хочуть нагадати, як змінити довжину стовпця. -наголошуйте, щоб сказати «спасибі», не помітивши (як я цього не зробив, поки не прочитав ваш коментар), що питання є більш тонким, ніж підказує заголовок питання.
dumbledad

6

Якщо хтось хоче "Збільшити ширину стовпця повтореної таблиці" в SQL Server 2008, то не потрібно змінювати властивість " replicate_ddl=1". Просто виконайте наведені нижче кроки -

  1. Відкрити SSMS
  2. Підключення до бази даних видавця
  3. запустити команду - ALTER TABLE [Table_Name] ALTER COLUMN [Column_Name] varchar(22)
  4. Це збільшить ширину стовпця від і varchar(x)до тих varchar(22)самих змін, які ви можете побачити на передплатнику (транзакцію було повторено) Тому не потрібно повторно ініціалізувати реплікацію

Сподіваюся, що це допоможе всім, хто його шукає.


5

Дивіться це посилання

Змініть розмір або змініть стовпчик таблиці MS SQL Server із обмеженням за замовчуванням за допомогою команд T-SQL

рішення такої проблеми SQL Server буде

Видалення або відключення обмеження DEFAULT на стовпчику таблиці.

Зміна типу даних стовпця таблиці та / або розміру даних.

Повторне створення або включення обмеження за замовчуванням назад у стовпці таблиці sql.

До побачення


а перегляди прив'язки схеми потрібно скинути і знову створити.
Нуреттін

2

ось те, що працює з версією програми, яку я використовую: може працювати і для вас.

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


переглянути клас таблиці

select * from class

змінити довжину стовпців FacID (розглядається як "faci") та classnumber (розглядається як "classnu"), щоб відповідати цілим міткам.

alter table class modify facid varchar (5);

alter table class modify classnumber varchar(11);

переглянути таблицю ще раз, щоб побачити різницю

select * from class;

(запустіть команду ще раз, щоб побачити різницю)


Це змінює фактичну таблицю на добро, але на краще.

PS Я склав ці інструкції як примітку до команд. Це не тест, але може допомогти на одному :)


0

Перевірте порівняння стовпців. Цей скрипт може змінити порівняння на стандартну таблицю. Додайте поточне порівняння до сценарію.

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