Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
DACPAK и добавление в таблицу столбца UNIQUE NOT NULL
|
|||
|---|---|---|---|
|
#18+
В Визуальной студии создал проект "База данных" в котором описал структуру базы данных, в частности таблицу Код: sql 1. 2. 3. 4. 5. 6. Собрал файл DACPAC и развернул его у клиентов. Всё было хорошо, пока не пришло постановление "сверху" добавить в эту таблицу ещё одно уникальное не пустое поле value2 со значениями [value] + ' ' + CAST([id] as nvarchar) И вот тут у меня случился ступор: Сделать это скриптом, конечно, ничего не стоит, но как сделать это кошерно средствами MSVS? Пробовал использовать скрипты predeploy или postdeploy, получаю либо ошибку, типа поле [value2] определяется дважды, либо в скрипте-описании вижу поле value2 nvarchar(max) NULL, которое уже в скрипте постразвёртывания заполняется и переопределяется в NOT NULL UNIQUE, что на мой взгляд - не совсем удачно. Люди, подскажите, пожалуйста, как решить проблему грамотно? А баги ползали и нагло шевелили усами... (с) Не моё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2018, 09:00 |
|
||
|
DACPAK и добавление в таблицу столбца UNIQUE NOT NULL
|
|||
|---|---|---|---|
|
#18+
HarlanПробовал использовать скрипты predeploy или postdeploy, получаю либо ошибку, типа поле [value2] определяется дважды, либо в скрипте-описании вижу поле value2 nvarchar(max) NULL, которое уже в скрипте постразвёртывания заполняется и переопределяется в NOT NULL UNIQUE, что на мой взгляд - не совсем удачно. Люди, подскажите, пожалуйста, как решить проблему грамотно?Почему "не совсем удачно"? Вручную, скриптом, вы это делали бы так же. Только странно что nvarchar( max ), этот тип же нельзя сделать уникальным. Наверное, вы опечатались? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2018, 09:27 |
|
||
|
DACPAK и добавление в таблицу столбца UNIQUE NOT NULL
|
|||
|---|---|---|---|
|
#18+
alexeyvgТолько странно что nvarchar( max ), этот тип же нельзя сделать уникальным. Наверное, вы опечатались?А где у него NVARCHAR(MAX)? Я вижу NVARCHAR(255). И не вижу поля [name], по которому сделан UNIQUE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2018, 09:38 |
|
||
|
DACPAK и добавление в таблицу столбца UNIQUE NOT NULL
|
|||
|---|---|---|---|
|
#18+
iapА где у него NVARCHAR(MAX)?О! В тексте нашёл value2 nvarchar(max). Присоединяюсь к alexeyvg ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2018, 09:39 |
|
||
|
DACPAK и добавление в таблицу столбца UNIQUE NOT NULL
|
|||
|---|---|---|---|
|
#18+
alexeyvg, Да. Опечатка. NVARCHAR(255) поле [value], вместо [name] Пока писал вопрос, меня отвлекли на другую базу, вот и пошли ошибки. Прошу прощения. Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2018, 10:44 |
|
||
|
DACPAK и добавление в таблицу столбца UNIQUE NOT NULL
|
|||
|---|---|---|---|
|
#18+
alexeyvgПочему "не совсем удачно"? Потому, что в исходном скрипте создания таблицы, поле [value2] будет обозначено как NULL и NOT UNIQUE. Что затрудняет документирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2018, 10:47 |
|
||
|
DACPAK и добавление в таблицу столбца UNIQUE NOT NULL
|
|||
|---|---|---|---|
|
#18+
Эщё один пример почему "не совсем удачно" относится к последующему обновлению структуры. Обновляемая структура будет содержать поле [value2] NOT NULL UNIQUE, Обновление структуры изначально вернёт его к NULL и NOT UNIQUE, а затем скрипт постустановки опять вернёт его к NOT NULL и UNIQUE. А можно вот этот онанизм как-то запретить? Например, проверять что если поле есть, то не менять его? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2018, 11:11 |
|
||
|
DACPAK и добавление в таблицу столбца UNIQUE NOT NULL
|
|||
|---|---|---|---|
|
#18+
HarlanЭщё один пример почему "не совсем удачно" относится к последующему обновлению структуры. Обновляемая структура будет содержать поле [value2] NOT NULL UNIQUE, Обновление структуры изначально вернёт его к NULL и NOT UNIQUE, а затем скрипт постустановки опять вернёт его к NOT NULL и UNIQUE. А можно вот этот онанизм как-то запретить? Например, проверять что если поле есть, то не менять его?Это вот о чём вообще? Что куда вернёт и почему? Разве вы не сами скрипт очередного обновления пишете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2018, 11:16 |
|
||
|
DACPAK и добавление в таблицу столбца UNIQUE NOT NULL
|
|||
|---|---|---|---|
|
#18+
Harlan, так задайте по умолчанию значение [value] + ' ' + CAST([id] as nvarchar) для новой колонки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2018, 12:54 |
|
||
|
DACPAK и добавление в таблицу столбца UNIQUE NOT NULL
|
|||
|---|---|---|---|
|
#18+
iap, использование DACPAC и подразумевает, что в нём содержится описание структуры БД, а процесс обновления сам строит скрипты, которые будут клиентскую базу данных обновлять до актуальной. На сколько я смог разобраться в этом механизме, я могу описать два скрипта, которые будут исполняться или перед развёртыванием, или после развёртывания. Однако, свои скрипты обновления строятся до исполнения скрипта PREDEPLOY поэтому, если я добавлю поле в этом скрипте, то развёртывание свалится с ошибкой "Не может быть два поля с одинаковым именем", а если добавлю изменение поля в скрипт POSTDEPLOY, то основной скрипт сперва "перевернёт" поле в NULL NOT UNIQUE, а потом уже скрипт POSTDEPLOY вернёт этому полю атрибуты NOT NULL UNIQUE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2018, 07:15 |
|
||
|
DACPAK и добавление в таблицу столбца UNIQUE NOT NULL
|
|||
|---|---|---|---|
|
#18+
Владислав Колосов, пробовал, не прокатывает. Сообщение: "SQL70536: Имя "[value]" запрещено в данном контексте. К допустимым выражениям относятся константы, константные выражения и (в некоторых контекстах) переменные. Имена столбцов запрещены" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2018, 07:23 |
|
||
|
DACPAK и добавление в таблицу столбца UNIQUE NOT NULL
|
|||
|---|---|---|---|
|
#18+
HarlanИ вот тут у меня случился ступор: Сделать это скриптом, конечно, ничего не стоит, но как сделать это кошерно средствами MSVS?За удобства надо платить. Жонглировать костылями- это нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2018, 09:28 |
|
||
|
DACPAK и добавление в таблицу столбца UNIQUE NOT NULL
|
|||
|---|---|---|---|
|
#18+
Harlan, на 2 "деплоя" разбейте, всего-то делов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2018, 10:41 |
|
||
|
DACPAK и добавление в таблицу столбца UNIQUE NOT NULL
|
|||
|---|---|---|---|
|
#18+
HarlanalexeyvgПочему "не совсем удачно"? Потому, что в исходном скрипте создания таблицы, поле [value2] будет обозначено как NULL и NOT UNIQUE. Что затрудняет документирование.В следующей версии сделаете NOT NULL и UNIQUE. Надеюсь, это то он переварит? Хотя неудобно, конечно, и костыли, и все изменения от других разработчиков порушат продакшен. Так что в общем этот вариант отпадает. Я, честно говоря, думал, что DACPAC не будет добавлять поле, если оно уже есть. И не ожидал, что операция добавление поля представляется разработчикам Visual Studio настолько невероятно уникальной операцией, что они этого не сделали. Или, может, сделали, но мы тут не знаем, какую галочку в смвойствах нажать? Я эту технологию не применял, когда она появилась, думал, что если допилят (что для МС эпохи "после Билла" маловероятно, но в сиквельной команде возможно), то буду. Но увы, не допилили. Тек что в студенческой лабе - велком, в проф работе не применяйте. Используйте просто проект базы, все изменения делайте скриптами, сохраняемыми в том же проекте, время от времени используйте Compare, для сравнения проекта и базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2018, 12:37 |
|
||
|
DACPAK и добавление в таблицу столбца UNIQUE NOT NULL
|
|||
|---|---|---|---|
|
#18+
Критик, замечательная идея. Только никак не соображу, что писать в первом деплое, а что во втором? Не подскажете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2018, 10:23 |
|
||
|
DACPAK и добавление в таблицу столбца UNIQUE NOT NULL
|
|||
|---|---|---|---|
|
#18+
alexeyvg, у меня есть несколько клиентов, которые обновляют своё ПО когда угодно. Многие из этих клиентов из серии "Кто там? Сиди, я сам открою". Поэтому не хотелось бы им делать "сложные" инструкции с последовательными накатываниями пакетов. Но, видимо, другого варианта нет. DACPAC не добавляет второе поле, если оно существовало до начала развёртывания. Но если началось развёртывание, то он сперва строит скрипт обновления исходя из того, что есть сейчас, потом уже выполняет скрипт predeploy. И если в этом скрипте есть код, который добавил это поле в таблицу, то основной код дакпака вылетит с ошибкой. Отсюда вывод: скрипт predeploy вынести за пределы dacpac. Т.е. сперва исполнить его, а потом уже развёртывать dacpac. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2018, 10:31 |
|
||
|
DACPAK и добавление в таблицу столбца UNIQUE NOT NULL
|
|||
|---|---|---|---|
|
#18+
HarlanDACPAC не добавляет второе поле, если оно существовало до начала развёртывания. Но если началось развёртывание, то он сперва строит скрипт обновления исходя из того, что есть сейчас, потом уже выполняет скрипт predeploy. И если в этом скрипте есть код, который добавил это поле в таблицу, то основной код дакпака вылетит с ошибкой. Отсюда вывод: скрипт predeploy вынести за пределы dacpac. Т.е. сперва исполнить его, а потом уже развёртывать dacpac.Вот как, спасибо. Harlanalexeyvg, у меня есть несколько клиентов, которые обновляют своё ПО когда угодно. Многие из этих клиентов из серии "Кто там? Сиди, я сам открою". Поэтому не хотелось бы им делать "сложные" инструкции с последовательными накатываниями пакетов. Но, видимо, другого варианта нет.Другой вариант - не использовать DACPAC :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 10:37 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39750607&tid=1688547]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
64ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 386ms |

| 0 / 0 |
