|
заполнение двух таблиц через INSERT OUTPUT INTO
|
|||
---|---|---|---|
#18+
есть таблица T_src с исходными данными (без Id), на их основе надо в таблицу T_Id нагенерить нужное число новых Id и заполнить таблицу T_data, где будут храниться сами данные со ссылками на полученные Id. пишу конструкцию INSERT ... OUPTUT INTO ... SELECT ... FROM ... , получаю ошибку на использовании алиаса таблицы из FROM, хотя пример Е намекает, что так делать можно. к тому же, приходится добавлять в таблицу с identity фейковое поле, т.к. непонятно как заставить работать insert default values для вставки нескольких строк можно ли обойтись одним запросом или придется заполнять T_Id и T_data отдельно? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2010, 14:45 |
|
заполнение двух таблиц через INSERT OUTPUT INTO
|
|||
---|---|---|---|
#18+
Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2010, 14:47 |
|
заполнение двух таблиц через INSERT OUTPUT INTO
|
|||
---|---|---|---|
#18+
полуофф: почему для identity заведена отдельная таблица? почему бы не перенести identity в таблицу T_data? -------------------------------------------------------------------------------------- по сабжу - если мне не изменяет склероз, то MS SQL не позволяет то что хочет автор ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2010, 15:10 |
|
заполнение двух таблиц через INSERT OUTPUT INTO
|
|||
---|---|---|---|
#18+
Это неявно записно здесь from_table_name Is a column prefix that specifies a table included in the FROM clause of a DELETE, UPDATE, or MERGE statement that is used to specify the rows to update or delete. Как видите INSERT нет в перечисленных командах ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2010, 15:12 |
|
заполнение двух таблиц через INSERT OUTPUT INTO
|
|||
---|---|---|---|
#18+
Паганель, T_data это история справочника (столбец Id содержит не уникальные значения), а T_Id - таблица с уникальными Id для поддержания целостности за счет FK. -------------------- жаль, хотел красиво Glory да, пропустил этот момент. и непонятно, почему insert является особым случаем ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2010, 15:26 |
|
заполнение двух таблиц через INSERT OUTPUT INTO
|
|||
---|---|---|---|
#18+
ShakillT_data это история справочника (столбец Id содержит не уникальные значения), а T_Id - таблица с уникальными Id для поддержания целостности за счет FK.Попробуйте взглянуть на историю с другой стороны: 1) В таблицу истории вносить только информацию о фактах изменения записей справочника, 2) Записи справочника, про которые в истории никакой информации нет, считать историей вставок Другими словами, запрос на получение отчета по истории будет примерно такой: Код: plaintext 1. 2. 3.
Также рекомендую обратиться в форум Проектирование БД , там Вам наверняка еще лучшее что-то предложат ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2010, 15:42 |
|
заполнение двух таблиц через INSERT OUTPUT INTO
|
|||
---|---|---|---|
#18+
Shakillда, пропустил этот момент. и непонятно, почему insert является особым случаем Насколько я понял, это связано с тем что при update, delete ты можешь указывать дополнительные таблицы в предложении from. типа update tab1 from tab1, tab2 и можно ссылаться в output на поля как tab1, так и tab2. В insert-е такого нет. Вот с msdn форума ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2010, 16:00 |
|
заполнение двух таблиц через INSERT OUTPUT INTO
|
|||
---|---|---|---|
#18+
Паганель, а какие преимущества имеет то что вы предложили? история справочников мне нужна не для просмотра собственно истории изменений, а для того чтоб можно было посмотреть данные журналов на любой момент времени с учетом того что содержимое справочников могло быть иным ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2010, 16:14 |
|
заполнение двух таблиц через INSERT OUTPUT INTO
|
|||
---|---|---|---|
#18+
ShakillПаганель, а какие преимущества имеет то что вы предложили?Отпадает необходимость что-либо заносить в историю в момент вставки в справочник новой записи Shakillпосмотреть данные журналов на любой момент времени с учетом того что содержимое справочников могло быть инымПриведенный мною выше пример запроса решает эту задачу? Если нет, то почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2010, 16:19 |
|
заполнение двух таблиц через INSERT OUTPUT INTO
|
|||
---|---|---|---|
#18+
SomewhereSomehow, спасибо за ссылку, теперь по OUTPUT вопрос исчерпан Паганель, дело в том что T_data это одновременно рабочий справочник и его история, т.к. объемы не те, чтобы создавать отдельную таблицу и выносить туда актуальные записи. а в T_id хранятся только Id, на которые ссылаются T_data и таблицы, использующие этот справочник. так что мой вариант проще с точки зрения структуры. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2010, 16:31 |
|
заполнение двух таблиц через INSERT OUTPUT INTO
|
|||
---|---|---|---|
#18+
Shakillобъемы не те, чтобы создавать отдельную таблицу и выносить туда актуальные записиЯ разве предлагал создавать какие-то новые таблицы? Shakillмой вариант проще с точки зрения структуры.Чем по структуре мой вариант отличается от Вашего? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2010, 16:39 |
|
заполнение двух таблиц через INSERT OUTPUT INTO
|
|||
---|---|---|---|
#18+
Shakill, а не хотите проще сделать? раз уж всерно добаляете фейковую колонку, то лучше вместо нее добавить тот же текст и потом его же использовать для вставки в T-data, типа такого: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2010, 16:39 |
|
заполнение двух таблиц через INSERT OUTPUT INTO
|
|||
---|---|---|---|
#18+
Паганель, вы предлагали сделать в T_Id больше столбцов и использовать ее как хранилище актуальных записей. несколько сложнее, да и в запросах union появляется SomewhereSomehow, это был упрощенный пример, на самом деле колонок больше, порядка 20-30. для написания скриптов придется активно использовать копипасту, да и сами они станут громоздкими (копирование сначала в T_Id, а потом в T_data), но возможно что так и поступлю ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2010, 16:57 |
|
заполнение двух таблиц через INSERT OUTPUT INTO
|
|||
---|---|---|---|
#18+
Shakillв запросах union появляетсяВ запросах, когда нужна история - да Но я как-то привык, что для большинства задач нужны как раз актуальные данные, а история нужна реже Наверное, просто у меня ограниченный опыт разработки, и для Вашей задачи мои советы не подойдут ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2010, 17:09 |
|
заполнение двух таблиц через INSERT OUTPUT INTO
|
|||
---|---|---|---|
#18+
Паганель, конкретно в этой задаче пользователь вводит новые данные и просматривает уже введенные при помощи одних и тех же форм. соотв-но, я решил не разделять запросы "актуальные" и "исторические", а во всех случаях делать привязку к моменту времени, который интересует пользователя ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2010, 17:15 |
|
|
start [/forum/topic.php?fid=46&msg=36766598&tid=1725256]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
359ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 264ms |
total: | 722ms |
0 / 0 |