Возможно ли иметь поля nvarchar(max) и varbinar(max) в одной таблице

Я использую SQL Server 2008 R2.

У меня есть таблица с несколькими полями, включая поле nvarchar(max).

Когда я пытаюсь добавить новое поле типа varbinary(max), я получаю сообщение об ошибке: «Сохранение изменений не разрешено. Внесенное вами изменение требует удаления и воссоздания следующих таблиц».

Возможно ли иметь поля nvarchar (max) и varbinar (max) в одной таблице?

Единственный способ исправить это, создать новую таблицу с новой структурой и перенести данные?


person Shiraz Bhaiji    schedule 15.10.2010    source источник
comment
Какой сценарий вы используете для внесения изменений?   -  person HLGEM    schedule 15.10.2010


Ответы (4)


Да, это возможно.

Если вы видите это сообщение, вы, должно быть, пытались вставить новый столбец в середину существующих в конструкторе таблиц SSMS. Добавьте его в конец существующих столбцов, тогда таблицу не нужно будет полностью перестраивать.

Или просто выполнить

alter table YourTable add newcol varbinary(max) null
person Martin Smith    schedule 15.10.2010
comment
Я восстановил ваш ответ и вернулся к исходному ответу, так как это была именно та проблема, с которой я пытался добавить поле посреди существующих. Также работает запрет на сохранение изменений. Спасибо - person Shiraz Bhaiji; 15.10.2010
comment
@Shiraz - Да, по какой-то причине мне удалось запутаться в этом и убедить себя, что ответ был неправильным! - person Martin Smith; 15.10.2010

Да, конечно - у вас, вероятно, просто включена эта новая опция «безопасности» в SSMS (по умолчанию она включена):

альтернативный текст

Это под Tools > Options ....

person marc_s    schedule 15.10.2010
comment
Я только что проверил, и с включенной этой опцией вы видите сообщение только тогда, когда SSMS воссоздает всю таблицу за кулисами. Если столбец добавлен в конец таблицы, вы не получите это сообщение. - person Martin Smith; 15.10.2010

Перейдите к Tools | Options > Designers и снимите флажок «Запретить сохранение изменений, требующих повторного создания таблицы».

person Brad    schedule 15.10.2010

SQL Server не позволяет вам развивать таблицу таким образом, потому что он не может динамически изменять хранилище для существующей таблицы. Если вы хотите сделать это, вам нужно создать новую таблицу с новой схемой и заполнить ее данными из исходной таблицы.

person Michael Goldshteyn    schedule 15.10.2010
comment
Я предполагаю, что он просто отключил воссоздание таблицы, и SQL Server должен воссоздать таблицу. Хороший улов! - person Michael Goldshteyn; 15.10.2010