Size: a a a

SqlCom.ru - Стиль жизни SQL

2020 November 13

А

Андрій in SqlCom.ru - Стиль жизни SQL
Anatoly Kotelevets
народ, подскажете, уверен что 100% кто-то уже подобное решал, поэтому не хочу наступать на костыли которые 100% будут
Итак нужно написать на SSIS ETL процесс которые мигрирует данные из запроса в таблицу (target stg table)
select * from tableA where date>@d
проблема с решение которые есть
1 таблица - это переменная будем читать из разных таблиц, поэтому пишеться "универсальный" пакет
*  - у каждой таб. свой набор колонок
DataFlow не подходит т.к. у меня будет постоянно разные набор колонок
Соответственно использовать стандартный решение которые предлагаются по туториал не подходит

решения которые вижу Я
сохраняем запроса в переменную типа Object далее на c# пишем скрипт который
1. Конвертируем нашу varible в DataTablee и либо полученный dataSet сохраняем в файл . Далее уже bultInsert делаем вставку в target stg table
2. либо уже вставит данные в target stg table


PS targetServer ms sql
SourceServer - разные субд (MySql, MsSQL)

ps2 писать это на dynamicSql не предлагать..
да можно на шарпе написать
а лучше - BIML
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
нагенерировал пакетов сколько надо и все, при добавлении новых таблиц - сгенерироовал скрипт еще раз
источник

V

Vladimir in SqlCom.ru - Стиль жизни SQL
Anatoly Kotelevets
народ, подскажете, уверен что 100% кто-то уже подобное решал, поэтому не хочу наступать на костыли которые 100% будут
Итак нужно написать на SSIS ETL процесс которые мигрирует данные из запроса в таблицу (target stg table)
select * from tableA where date>@d
проблема с решение которые есть
1 таблица - это переменная будем читать из разных таблиц, поэтому пишеться "универсальный" пакет
*  - у каждой таб. свой набор колонок
DataFlow не подходит т.к. у меня будет постоянно разные набор колонок
Соответственно использовать стандартный решение которые предлагаются по туториал не подходит

решения которые вижу Я
сохраняем запроса в переменную типа Object далее на c# пишем скрипт который
1. Конвертируем нашу varible в DataTablee и либо полученный dataSet сохраняем в файл . Далее уже bultInsert делаем вставку в target stg table
2. либо уже вставит данные в target stg table


PS targetServer ms sql
SourceServer - разные субд (MySql, MsSQL)

ps2 писать это на dynamicSql не предлагать..
Biml!
Несколько дней проб и ошибок и пакеты для любого кол-ва полей будут генериться моментально.
источник

f

f in SqlCom.ru - Стиль жизни SQL
Погуглил biml, выглядит прикольно.
источник

NP

Nick Proskuryakov in SqlCom.ru - Стиль жизни SQL
f
Погуглил biml, выглядит прикольно.
мощь)
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
Vladimir
Biml!
Несколько дней проб и ошибок и пакеты для любого кол-ва полей будут генериться моментально.
поддерживаю, штука улет)
на счет моментально правда я б не был так уверен) у меня пакеты генерируются минут 20
источник

ВБ

Владимир Боярских... in SqlCom.ru - Стиль жизни SQL
Anatoly Kotelevets
народ, подскажете, уверен что 100% кто-то уже подобное решал, поэтому не хочу наступать на костыли которые 100% будут
Итак нужно написать на SSIS ETL процесс которые мигрирует данные из запроса в таблицу (target stg table)
select * from tableA where date>@d
проблема с решение которые есть
1 таблица - это переменная будем читать из разных таблиц, поэтому пишеться "универсальный" пакет
*  - у каждой таб. свой набор колонок
DataFlow не подходит т.к. у меня будет постоянно разные набор колонок
Соответственно использовать стандартный решение которые предлагаются по туториал не подходит

решения которые вижу Я
сохраняем запроса в переменную типа Object далее на c# пишем скрипт который
1. Конвертируем нашу varible в DataTablee и либо полученный dataSet сохраняем в файл . Далее уже bultInsert делаем вставку в target stg table
2. либо уже вставит данные в target stg table


PS targetServer ms sql
SourceServer - разные субд (MySql, MsSQL)

ps2 писать это на dynamicSql не предлагать..
> 1. Конвертируем нашу varible в DataTablee и либо полученный dataSet сохраняем в файл . Далее уже bultInsert делаем вставку в target stg table

BULK INSERT можно и не из файла делать. В C# можно это сделать с помощью SqlBulkCopy и реализацию своего интерфейса IDataReader (там конечно дофига ненужных методов нужно реализовать - мне не понравилось, возможно есть какие-то обёртки, которые упрощают этот процесс). Делал такую штуку для быстрой вставки данных из Excel. В сети можно найти примеры реализации.
источник

Е

Евгений in SqlCom.ru - Стиль жизни SQL
Здравствуйте. Не затруднит вас подсказать как правильно решить задачу, взятую из sql-ex.ru ?
т.е. мне не нужно полностью готовое решение,
хотелось-бы чтобы подсказали, как правильно разбить эту задачу на подзадачи, чтобы решить её.
База данных:
Рассматривается БД кораблей, участвовавших во второй мировой войне. Имеются следующие отношения:
Classes (class, type, country, numGuns, bore, displacement)
Ships (name, class, launched)
Battles (name, date)
Outcomes (ship, battle, result)
Корабли в «классах» построены по одному и тому же проекту, и классу присваивается либо имя первого корабля,
построенного по данному проекту, либо названию класса дается имя проекта, которое не совпадает ни с одним из кораблей в БД.
Корабль, давший название классу, называется головным.
Отношение Classes содержит имя класса, тип (bb для боевого (линейного) корабля или bc для боевого крейсера),
страну, в которой построен корабль, число главных орудий, калибр орудий (диаметр ствола орудия в дюймах) и водоизмещение
( вес в тоннах). В отношении Ships записаны название корабля, имя его класса и год спуска на воду.
В отношение Battles включены название и дата битвы, в которой участвовали корабли,
а в отношении Outcomes – результат участия данного корабля в битве (потоплен-sunk, поврежден - damaged или невредим - OK).
Замечания.
1) В отношение Outcomes могут входить корабли, отсутствующие в отношении Ships.
2) Потопленный корабль в последующих битвах участия не принимает.

Задача:
Найдите названия кораблей, имеющих наибольшее число орудий среди всех имеющихся кораблей такого же водоизмещения 
(учесть корабли из таблицы Outcomes).

пытался сделал так:
select t1.name from 
(
   select s.name from classes c join ships s on c.class=s.class
   union
   select o.ship from outcomes o join classes c on c.class=o.ship
) as t1
where exists(
   select s.name, c.class, c.numGuns, c.displacement from classes c join ships s on c.class=s.class
   union
   select o.ship, c.class, c.numGuns, c.displacement from outcomes o join classes c on c.class=o.ship
   where c.displacement = t1.displacement
   and t1.numGuns > c.numGuns
   )
но это не правильно.

в php как-то полегче, там можно прощупать каждую переменную в цикле, что в ней находится
источник

NP

Nick Proskuryakov in SqlCom.ru - Стиль жизни SQL
И для кого тут этот лонгрид? Прочтите правила, оформите вопрос с помощью pastebin, а ещё лучше сразу в @sql_ninja
источник

Е

Евгений in SqlCom.ru - Стиль жизни SQL
Nick Proskuryakov
И для кого тут этот лонгрид? Прочтите правила, оформите вопрос с помощью pastebin, а ещё лучше сразу в @sql_ninja
извиняюсь, поправил
источник

ФГ

Федор Гулин... in SqlCom.ru - Стиль жизни SQL
Оно как бы
да но я не нашел способа как нормально искать ошибки.
У меня было 4 biml  генрящего пакет из 300 сорс-трансыорм-таргет.
Из mysql  в МС скл.
Причем там было 3 вида таблиц и Сия цепочка отличалась по логике.
Мне досталось по наследству.
У меня была мысль разбить пакет на 3 (ну уж очень большой)
Я пару дней потратил на эксперименты и плюнул.
Большой нужды не было но точно помню что любую описку в xml трудно найти было
Ну и.е biml решит эту задачу.
Вопрос в трудозатратах
источник
2020 November 14

А

Андрій in SqlCom.ru - Стиль жизни SQL
Евгений
Здравствуйте. Не затруднит вас подсказать как правильно решить задачу, взятую из sql-ex.ru ?
т.е. мне не нужно полностью готовое решение,
хотелось-бы чтобы подсказали, как правильно разбить эту задачу на подзадачи, чтобы решить её.
База данных:
Рассматривается БД кораблей, участвовавших во второй мировой войне. Имеются следующие отношения:
Classes (class, type, country, numGuns, bore, displacement)
Ships (name, class, launched)
Battles (name, date)
Outcomes (ship, battle, result)
Корабли в «классах» построены по одному и тому же проекту, и классу присваивается либо имя первого корабля,
построенного по данному проекту, либо названию класса дается имя проекта, которое не совпадает ни с одним из кораблей в БД.
Корабль, давший название классу, называется головным.
Отношение Classes содержит имя класса, тип (bb для боевого (линейного) корабля или bc для боевого крейсера),
страну, в которой построен корабль, число главных орудий, калибр орудий (диаметр ствола орудия в дюймах) и водоизмещение
( вес в тоннах). В отношении Ships записаны название корабля, имя его класса и год спуска на воду.
В отношение Battles включены название и дата битвы, в которой участвовали корабли,
а в отношении Outcomes – результат участия данного корабля в битве (потоплен-sunk, поврежден - damaged или невредим - OK).
Замечания.
1) В отношение Outcomes могут входить корабли, отсутствующие в отношении Ships.
2) Потопленный корабль в последующих битвах участия не принимает.

Задача:
Найдите названия кораблей, имеющих наибольшее число орудий среди всех имеющихся кораблей такого же водоизмещения 
(учесть корабли из таблицы Outcomes).

пытался сделал так:
select t1.name from 
(
   select s.name from classes c join ships s on c.class=s.class
   union
   select o.ship from outcomes o join classes c on c.class=o.ship
) as t1
where exists(
   select s.name, c.class, c.numGuns, c.displacement from classes c join ships s on c.class=s.class
   union
   select o.ship, c.class, c.numGuns, c.displacement from outcomes o join classes c on c.class=o.ship
   where c.displacement = t1.displacement
   and t1.numGuns > c.numGuns
   )
но это не правильно.

в php как-то полегче, там можно прощупать каждую переменную в цикле, что в ней находится
Скрин давай
источник

Е

Евгений in SqlCom.ru - Стиль жизни SQL
Андрій
Скрин давай
скрин чего именно нужен?
источник

Е

Евгений in SqlCom.ru - Стиль жизни SQL
http://sqlfiddle.com/#!9/e0be62
база данных
источник

Е

Евгений in SqlCom.ru - Стиль жизни SQL
кто-то подскажет?
источник

EK

Evgeniy Kovel in SqlCom.ru - Стиль жизни SQL
Всех приветствую!
Есть тут те, кто пишет на vb.net и может подсказать как добавлять данные в ms sql через транзакции?
источник

VK

Vladimir Kolyada in SqlCom.ru - Стиль жизни SQL
Так же как в C#, ADO.NET одинаковое, синтаксис разный
источник

ДВ

Дмитрий Владимирович... in SqlCom.ru - Стиль жизни SQL
Всем привет.
Редко вопросы задают, но вот появился. Используется СУБД MS Sql Server 2019 Ent.

Предлагается некоторая архитектурная реализация в которой наблюдается "не понятное" мне явление, но как переубедить  исполнителя - не знаю, не "пробиваемого" аргумента не могу подобрать.

Суть:

Имеется таблица
В которой содержатся данные о химических элементах по атрибутам, Id статьи, наименование статьи, Id отчёта, 116 атрибутов по содержанию и массе элементов(Decimal(38,18) - проблему расчётов с максимальным decimal удалось донести - должны изменить). Из этой таблицы происходит выборка в отчёт (SSRS), ед. измерения некоторых элементов могут различаться, поэтому для каждого из 116 атрибутов добавят ещё атрибут UOM, так же элементы могут иметь разные правила округления - для каждого из 116 атрибутов будет добавлен столбец roundRule... Так-же присутствуют атрибуты dateCreate, dateDelete, dateUpdate хотя  заявляют использование CDC, поэтому думаю что их уберут. Но на данный момент в одной таблице будет 362 атрибута. Конечно атрибуты будут разряженными.

Было предложено 2 альтернативы:

1. Структура на  базе справочников, сократить объем до 20 атрибутов в основной таблице  и пары справочников (наименованием столбца, наменование ед.изм, правила округления) .  Выбирать данные для отчёта из view и использовать PIVOT. Или выбирать из процедуры используя динам.sql.

2. Хранить все в одной сущности структуры :
"ключ", "наименование атрибута", "тип", "значение"... Т. е перевернутвя структура.

Эти альтернативы - называют сложными и игнорируют. Организационно не имею права за них реализовывать, только выдавать замечания, таблица из 362 атрибутов попахивает каким то **здец*м в дальнейшей работе.  

Есть мысли как аргументировать почему создание таблицы с таким набором атрибутов не очень хорошая идея ?
источник

DI

Dmitriy Ivanov in SqlCom.ru - Стиль жизни SQL
Дмитрий Владимирович
Всем привет.
Редко вопросы задают, но вот появился. Используется СУБД MS Sql Server 2019 Ent.

Предлагается некоторая архитектурная реализация в которой наблюдается "не понятное" мне явление, но как переубедить  исполнителя - не знаю, не "пробиваемого" аргумента не могу подобрать.

Суть:

Имеется таблица
В которой содержатся данные о химических элементах по атрибутам, Id статьи, наименование статьи, Id отчёта, 116 атрибутов по содержанию и массе элементов(Decimal(38,18) - проблему расчётов с максимальным decimal удалось донести - должны изменить). Из этой таблицы происходит выборка в отчёт (SSRS), ед. измерения некоторых элементов могут различаться, поэтому для каждого из 116 атрибутов добавят ещё атрибут UOM, так же элементы могут иметь разные правила округления - для каждого из 116 атрибутов будет добавлен столбец roundRule... Так-же присутствуют атрибуты dateCreate, dateDelete, dateUpdate хотя  заявляют использование CDC, поэтому думаю что их уберут. Но на данный момент в одной таблице будет 362 атрибута. Конечно атрибуты будут разряженными.

Было предложено 2 альтернативы:

1. Структура на  базе справочников, сократить объем до 20 атрибутов в основной таблице  и пары справочников (наименованием столбца, наменование ед.изм, правила округления) .  Выбирать данные для отчёта из view и использовать PIVOT. Или выбирать из процедуры используя динам.sql.

2. Хранить все в одной сущности структуры :
"ключ", "наименование атрибута", "тип", "значение"... Т. е перевернутвя структура.

Эти альтернативы - называют сложными и игнорируют. Организационно не имею права за них реализовывать, только выдавать замечания, таблица из 362 атрибутов попахивает каким то **здец*м в дальнейшей работе.  

Есть мысли как аргументировать почему создание таблицы с таким набором атрибутов не очень хорошая идея ?
Всегда ли выбираются/ записываются все возможные атрибуты?
источник

G

Gopneg in SqlCom.ru - Стиль жизни SQL
Дмитрий Владимирович
Всем привет.
Редко вопросы задают, но вот появился. Используется СУБД MS Sql Server 2019 Ent.

Предлагается некоторая архитектурная реализация в которой наблюдается "не понятное" мне явление, но как переубедить  исполнителя - не знаю, не "пробиваемого" аргумента не могу подобрать.

Суть:

Имеется таблица
В которой содержатся данные о химических элементах по атрибутам, Id статьи, наименование статьи, Id отчёта, 116 атрибутов по содержанию и массе элементов(Decimal(38,18) - проблему расчётов с максимальным decimal удалось донести - должны изменить). Из этой таблицы происходит выборка в отчёт (SSRS), ед. измерения некоторых элементов могут различаться, поэтому для каждого из 116 атрибутов добавят ещё атрибут UOM, так же элементы могут иметь разные правила округления - для каждого из 116 атрибутов будет добавлен столбец roundRule... Так-же присутствуют атрибуты dateCreate, dateDelete, dateUpdate хотя  заявляют использование CDC, поэтому думаю что их уберут. Но на данный момент в одной таблице будет 362 атрибута. Конечно атрибуты будут разряженными.

Было предложено 2 альтернативы:

1. Структура на  базе справочников, сократить объем до 20 атрибутов в основной таблице  и пары справочников (наименованием столбца, наменование ед.изм, правила округления) .  Выбирать данные для отчёта из view и использовать PIVOT. Или выбирать из процедуры используя динам.sql.

2. Хранить все в одной сущности структуры :
"ключ", "наименование атрибута", "тип", "значение"... Т. е перевернутвя структура.

Эти альтернативы - называют сложными и игнорируют. Организационно не имею права за них реализовывать, только выдавать замечания, таблица из 362 атрибутов попахивает каким то **здец*м в дальнейшей работе.  

Есть мысли как аргументировать почему создание таблицы с таким набором атрибутов не очень хорошая идея ?
а проблема-то в чем? особенно непонятно чем децимал максимальный не угодил. место кончилось?
источник