Pull to refresh
11
0
Send message
Вторая проблема в том, что в обычную временную таблицу bcp записать не может. Он ее просто не увидит. Значит нужно использовать постоянную таблицу или глобальную временную.

Используйте bulk insert. Он — может.
Для использования MERGE у вас должна быть либо веская причина (возможно, вам нужна какая-то маловразумительная MERGE-функциональность)

Использование merge — это единственный более-менее вменяемый способ вставить данные из нескольких таблиц, связанных ключами master-detail в другие несколько связанных таблиц, но уже с ключами на основе identity, или автогенерируемых newsequeninalid().
Merge + output, разумеется.
Данные в таблицах могут быть организованы двумя способами:

Кластерный индекс (clustered index)

Куча (heap)

Данные в таблицах могут быть организованы тремя способами:
Куча, кластерный индекс (rowstore), кластерный columnstore.
С 2014 уже как.
А с 2017 еще и в варианте архивного columnstore.
Я так понимаю, в MSSQL проблема решается просто построением колоночного индекса по таблице.
А это и невозможно. Бай дизайн. Для стандарта — так уж точно.
но есть ещё одна задача, загружать из XML не все, элементы а только те у которых ISACTIVE = 1

Если таковых записей — процентов 80, как минимум — не морочтесь. Грузите всё в промежуточную таблицу, а из нее — вставляйте с фильтрацией. Применение фильтра на клиенте, каким бы способом вы его не делали — снижает производительность радикально (ну, просто потому что ограничено ресурсами клиента, например).
Вот, если этих записей 1 из 100 — ну, тогда…
:facepalm!
1. Если вы накладываете ограничение FOREIGN KEY на таблицу, MSSQLSERVER накладывает ограничение, но оптимизацией доступа к ограничиваемым данным — не занимается. Поэтому необходимо, в обязательном порядке, и в master, и в detail таблицах построить индексы по полям, по которым осуществляется связь. В примере, с одной стороны — присутствует кластерный индекс, а вот с другой — поле FK — не проиндексировано.
Потенциально — будут проблемы и с производительностью, и с блокировками.
(* Upd. Прошу прощения, индекс по FK создан, сам дурак, т.с., но комментарий убирать не буду, т.к. это важный момент, нужно обратить внимание).

2. И FK, и CHECK были созданы без проверки (WITH CHECK CHECK CONSTRAINT). Следовательно, они — недоверенные. С недоверенными констрейнтами MSSQLSERVER ведет себя по-другому. В частности, он будет сканировать диапазоны, вместо поиска в них.

3. FK создан с опцией on update cascade on delete cascade, а тестируется случай, когда это всё «в Саратове», не нужно. А между тем, каскадные операции очень и очень небесплатны. И если вы решили использовать декларативную ссылочную целостность, трижды подумайте, нужны ли вам каскадные операции, и лучше не используйте их! Это не та опция, которую нужно включать «на всякий случай шоб було». Это потенциальный источник локов, дедлоков и падения производительности в тысячи раз!

4. Ограничение
add constraint ck_main_cc_lookupid check ((lookupid IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)));
— создано НЕВЕРНО!
Мало того что оно создано без with check, следовательно оно недоверенное, но к тому же и поле lookupid — NULLable! См.:

create table main_fk (
id int not null identity (1, 1),
lookupid int,
col1 int,
col2 int,
col3 varchar(100));
Т.е. констрейнт будет допускать вставку значения с lookupid = NULL, т.к. проверка выражения NULL in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19) вернет NULL (точнее — «неизвестно»), а «неизвестно» — это никак не False.
Это правильное поведение для данного примера? Я — не уверен, из контекста.

В общем, новичкам этого читать категорически нельзя, а не новичкам — не нужно, т.к. они и так все приведенное в статье — знают.
Итого: За перевод — спасибо, но контент кг/ам.

Ответ очевиден.
Потому что это "тире" — не "минус", а "длинное тире".
Длинное тире — это юникодный символ, и, собственно, в однобайтовый, 1 байт на символ, varchar — не помещается.
Collation тут не причем.

Нечто подобное есть у Лема в «Осмотр на месте». Там аборигены переходили в техногенную форму, запуская в кровь нанороботов, которые цеплялись к каждой клетке, и потом, в течение какого то времени обучались тому, как ведет себя клетка. А потом, когда клетка отмирала — занимали ее место, и продолжали функционировать в ее режиме, полностью воспроизводя ее функционал.
Разница в сжатии раром на максимальной компрессии и встроенного сжатия бекапов — менее 10%, а обычно 2-3%.
При том, что сжатый штатными средствами бекап — мгновенно доступен для восстановления, и не требует дополнительного места для декомпрессии.
Безусловно, «Физик №0» — это Галилей.
Без Галилея мы бы, возможно, до сих пор жили в Средневековье. Аристотелевская метафизическая парадигма доминировала в науке две тысячи лет, могла бы и две с половиной тысячи лет доминировать, не родись в 1564 году Галилей.

Если рассуждать концептуально, т.с., то первым, кто высказал мысль о том, что доказать своё суждение можно не логическими доводами, а просто спросив у бога (ну, или мироздания, кому как) — напрямую, был Р.Бэкон.
Галилей же, просто ввёл эту концепцию в обиход. Хотел написать: «научный», но тут вот в чем проблема… Только после того, как он это сделал — наука и родилась. Как явление в человеческой культуре.

Короче говоря, «Нет науки, кроме физики, и Галилей пророк ее.»
… и сын его — Ньютон

:-)

Эээ… Это попытка пересказать "Понимание SQL" М.Грабера???

А какое решение может быть кроме «закопать поглубже»?
В космос выкинуть? Ну так это и дорого, и опасно.
Чего красиво то? KeyRus вполне себе штатно вместо русской эр-маленькой выводил английскую пэ-маленькую.
Так что «в Азии приучены к засаде» (С) уже давно.
:-)))
А я, однажды, таки сделал…
:-))))
Ну, греки, древние, говорили: «Люди делятся на живых, мертвых, и тех, кто в море».

А по факту — феерический долбоебизм (я не знаю, является ли данный морской технический термин — общеупотребительным) испытаний, плавно перетекших в спасательную операцию, повесили на медийную фигуру, согласившуюся быть манекеном на этих самых испытаниях.
«Не ту страну назвали Гондурасом» (С).
Стоимость гигабитного соединения там начиналась от $70 в месяц, спутник был медленным и стоил дорого.

Стоимость МЕГАбитного соединения.
На самом деле — можно. Обедненный уран где то на порядок менее радиоактивен, чем природный, из-за того, что он обеднен по 235 изотопу, и 234 (которого, кстати, 0.03% в природном уране, но суммарная активность у него такая же, как у всего 238 в единице массы природного урана).
У обедненного урана, прошедшего российские центрифуги, будь он в виде оксида — радиоактивность примерно как у гранитного блока на мостовой. (Утрированно, но не особенно).

Information

Rating
4,678-th
Registered
Activity