powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Объеденить два запроса на ходу
25 сообщений из 25, страница 1 из 1
Объеденить два запроса на ходу
    #39512617
Bujhm_C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть запрос, который копирует данные из одной таблицы в другую

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 Dim strQuery As String = _
        "IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + "ScanProzorro_F" + "]') AND type in (N'U')) BEGIN Drop Table " + "ScanProzorro_F" + " END " + _
        "IF OBJECT_ID('dbo.ScanProzorro', 'U') IS NOT NULL "
        strQuery += "BEGIN "
        strQuery += "("
        strQuery += " SELECT [№ РПЗ],[№ закупки],SUBSTRING([Код ДК],0, 12) AS [Код ДК],[Статус 2],[Дата объявления],[Дата предл],[Дата аукциона],[Тема],[Ожид. стоимость],[Тип процедуры],[Контактное лицо]"
        strQuery += " INTO [ScanProzorro_F] "
        strQuery += " FROM [ScanProzorro] "
        strQuery += " WHERE [Подразд]='ЮУАЭС' AND [Тип]='ТМЦ'"
        strQuery += ")"
        strQuery += " ALTER TABLE [ScanProzorro_F] ALTER COLUMN [Ожид. стоимость] [numeric](16, 2) NULL "
        strQuery += " ALTER TABLE [ScanProzorro_F] ADD [ID_SPF] INT NOT NULL PRIMARY KEY IDENTITY(1,1)"
        strQuery += " END"
        ExecuteNonQuery(strQuery)



И есть запрос по непопаданию дублирующих записей

Код: vbnet
1.
2.
3.
4.
5.
  Dim strQuery As String = ""
        strQuery += " SELECT * FROM (SELECT [ScanProzorro_F].*, ROW_NUMBER() OVER (PARTITION BY [№ РПЗ] ORDER BY [№ закупки] DESC) AS RN "
        strQuery += " FROM  [ScanProzorro_F]) AS T "
        strQuery += " WHERE(RN = 1)"
        strQuery += " ORDER BY [№ закупки] DESC"




Оба эти запроса рабочие
Внимание вопрос:
Как объединить эти два запроса, чтобы копирование данные в таблицу уже не попадали дублирующие?
Заранее знатоков благодарю за помощь!
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39512622
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По "непопаданию" куда?

Имхую, что вам бы сначала с запросом разобраться, а потом уже объедЕнять на ходу.
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39512624
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай выборку не сразу в ScanProzorro_F, а сначала во временную таблицу, затем оттуда нужное вставь. Или подзапросом.

PS Вопрос не там задаешь, это это вопрос по T-SQL, лучше спросить в форуме Microsoft SQL Server
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39512625
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перенести всё это хозяйство в ХП.
P.S. DDL в рабочем коде, за исключением создания временных таблиц (в MSSQL) - зло.
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39512633
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39512640
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bujhm_C Как объединить эти два запроса, чтобы копирование данные в таблицу уже не попадали дублирующие?
Merge
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39512642
Bujhm_C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны,
Может вы и правы.
Но я просто "прусь" написанием кода на Vb.net даже если это касается запросов на SQL SERVER.
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39512646
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bujhm_CСон Веры Павловны,
Может вы и правы.
Но я просто "прусь" написанием кода на Vb.net даже если это касается запросов на SQL SERVER.

так ему и надо этому SQLServer!
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39512668
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bujhm_C,

нафига тогда SQL сервер? пропрись на VB так, чтоб всё прямо на месте мержилось и вставлялось, а потом булк экспортом херак, херак. Но главное вмазался бейсиком.
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39512758
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesBujhm_C,

нафига тогда SQL сервер? пропрись на VB так, чтоб всё прямо на месте мержилось и вставлялось, а потом булк экспортом херак, херак. Но главное вмазался бейсиком.

бэйсик вставляет так, что от него пруцца
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39512851
Bujhm_C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bujhm_C,

Зря я эту тему поднял. Это мое субъективное мнение.
Не по существу по постить здесь гораздо больше людей, чем предложить что то дельное. Да, ну и ладно!
Сам нашел решение.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim strQuery As String = _
        "IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + "ScanProzorro_F" + "]') AND type in (N'U')) BEGIN Drop Table " + "ScanProzorro_F" + " END " + _
        "IF OBJECT_ID('dbo.ScanProzorro', 'U') IS NOT NULL "
        strQuery += "BEGIN "
        strQuery += " SELECT [Подразд],[№ РПЗ],[№ закупки],SUBSTRING([Код ДК],0, 12) AS [Код ДК],[Статус 2],[Дата объявления],[Дата предл],[Дата аукциона],[Тема],[Ожид. стоимость],[Тип процедуры],[Контактное лицо]"
        strQuery += " INTO ScanProzorro_F"
        strQuery += " FROM (SELECT [ScanProzorro].*, ROW_NUMBER() OVER (PARTITION BY [№ РПЗ] ORDER BY [№ закупки] DESC) AS RN "
        strQuery += " FROM  [ScanProzorro]) AS T "
        strQuery += " WHERE(RN = 1 AND [Подразд]='ЮУАЭС' AND [Тип]='ТМЦ') "
        strQuery += " ORDER BY [№ закупки] DESC "
        strQuery += " ALTER TABLE [ScanProzorro_F] ALTER COLUMN [Ожид. стоимость] [numeric](16, 2) NULL "
        strQuery += " ALTER TABLE [ScanProzorro_F] ADD [ID_SPF] INT NOT NULL PRIMARY KEY IDENTITY(1,1)"
        strQuery += " END"
        ExecuteNonQuery(strQuery)



Всем спасибо, кто пытался помочь.
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39513242
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bujhm_CBujhm_C,

Зря я эту тему поднял. Это мое субъективное мнение.
Не по существу по постить здесь гораздо больше людей, чем предложить что то дельное. Да, ну и ладно!
Сам нашел решение.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim strQuery As String = _
        "IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + "ScanProzorro_F" + "]') AND type in (N'U')) BEGIN Drop Table " + "ScanProzorro_F" + " END " + _
        "IF OBJECT_ID('dbo.ScanProzorro', 'U') IS NOT NULL "
        strQuery += "BEGIN "
        strQuery += " SELECT [Подразд],[№ РПЗ],[№ закупки],SUBSTRING([Код ДК],0, 12) AS [Код ДК],[Статус 2],[Дата объявления],[Дата предл],[Дата аукциона],[Тема],[Ожид. стоимость],[Тип процедуры],[Контактное лицо]"
        strQuery += " INTO ScanProzorro_F"
        strQuery += " FROM (SELECT [ScanProzorro].*, ROW_NUMBER() OVER (PARTITION BY [№ РПЗ] ORDER BY [№ закупки] DESC) AS RN "
        strQuery += " FROM  [ScanProzorro]) AS T "
        strQuery += " WHERE(RN = 1 AND [Подразд]='ЮУАЭС' AND [Тип]='ТМЦ') "
        strQuery += " ORDER BY [№ закупки] DESC "
        strQuery += " ALTER TABLE [ScanProzorro_F] ALTER COLUMN [Ожид. стоимость] [numeric](16, 2) NULL "
        strQuery += " ALTER TABLE [ScanProzorro_F] ADD [ID_SPF] INT NOT NULL PRIMARY KEY IDENTITY(1,1)"
        strQuery += " END"
        ExecuteNonQuery(strQuery)



Всем спасибо, кто пытался помочь.

По пощу вопрос:
почему в общем случае вы проверяете существование одной таблицы, а удаляете другую?

"IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + "ScanProzorro_F" + "]') AND type in (N'U')) BEGIN Drop Table " + "ScanProzorro_F" + " END " + _
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39513703
Bujhm_C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин,

авторпочему в общем случае вы проверяете существование одной таблицы, а удаляете другую?

"IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + "ScanProzorro_F" + "]') AND type in (N'U')) BEGIN Drop Table " + "ScanProzorro_F" + " END " + _

Тут все верно.
Данные из таблицы ScanProzorro копируются в ScanProzorro_F. потому предварительно проверяю существование первичной ScanProzorro
Код: vbnet
1.
IF OBJECT_ID('dbo.ScanProzorro', 'U') IS NOT NULL 


А удаляю ScanProzorro_F , если она существует
Код: vbnet
1.
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + "ScanProzorro_F" + "]') AND type in (N'U')) BEGIN Drop Table " + "ScanProzorro_F" + " END 


потому, как данные копируются в чистую таблицу без дублей
и еще
Код: vbnet
1.
ADD [ID_SPF] INT NOT NULL PRIMARY KEY IDENTITY(1,1)

- думаю здесь тоже понятно.
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39513763
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bujhm_CНо я просто "прусь" написанием кода на Vb.net даже если это касается запросов на SQL SERVER.
А это один из видов мазохизма, или вы видите реальные плюсы в этом методе?

Без обид и претензий просто спросил.
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39513765
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bujhm_CА удаляю ScanProzorro_F , если она существует
Код: vbnet
1.
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + "ScanProzorro_F" + "]') AND type in (N'U')) BEGIN Drop Table " + "ScanProzorro_F" + " END 


Да, только при удалении схема таблицы не указана. Т.к. проверяется наличие dbo.ScanProzorro_F, а удаляется просто ScanProzorro_F, то в общем случае это могут быть 2 разные таблицы.
Ну, и раз уж пошла такая пьянка - до кучи:
1. Конкатенировать имя объекта с brackets - прием неправильный: если в запросе нужны quoted identifiers - нужно использовать функцию quotename .
2. В sys.objects поле type имеет тип char(2), сравнивать его с юникодной строкой смысла не имеет.
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39513772
Bujhm_C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183Bujhm_CНо я просто "прусь" написанием кода на Vb.net даже если это касается запросов на SQL SERVER.
А это один из видов мазохизма, или вы видите реальные плюсы в этом методе?

Без обид и претензий просто спросил.

Все запросы держу у себя в проекте а не серваке. Мне так удобно. По скорости выполнения не тестил, но на мой взгляд, выполняется достаточно быстро.
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39513828
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bujhm_CРолг Хупин,

авторпочему в общем случае вы проверяете существование одной таблицы, а удаляете другую?

"IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + "ScanProzorro_F" + "]') AND type in (N'U')) BEGIN Drop Table " + "ScanProzorro_F" + " END " + _

Тут все верно.
Данные из таблицы ScanProzorro копируются в ScanProzorro_F. потому предварительно проверяю существование первичной ScanProzorro
Код: vbnet
1.
IF OBJECT_ID('dbo.ScanProzorro', 'U') IS NOT NULL 


А удаляю ScanProzorro_F , если она существует
Код: vbnet
1.
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + "ScanProzorro_F" + "]') AND type in (N'U')) BEGIN Drop Table " + "ScanProzorro_F" + " END 


потому, как данные копируются в чистую таблицу без дублей
и еще
Код: vbnet
1.
ADD [ID_SPF] INT NOT NULL PRIMARY KEY IDENTITY(1,1)

- думаю здесь тоже понятно.

Не верно, и вам уже выше написали почему.
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39513933
Bujhm_C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, вы уходите от темы!

Задача изначально была поставлена как из одной таблицы (табл1) скопировать данные в другую (табл2) ,чтобы во второй (табл2) не было дублирующих записей по критерию!
Если, я непонятно заявил об этом вначале, что ж, пардон.

Код, который и я привел (прошу заметить и исправил сам) работает на ура! А все потуги обвинить меня в неверном его написании, по моему мнению надуманы.
Ну пропустил я dbo при Drop - спасибо, заметили. Но задача другая!!!

Всего хорошего!
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39514011
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bujhm_CВсего хорошего!
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39514086
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bujhm_CЗадача изначально была поставлена как из одной таблицы (табл1) скопировать данные в другую (табл2) ,чтобы во второй (табл2) не было дублирующих записей по критерию!


По-моему, написать

Код: sql
1.
2.
SELECT ... INTO table2
FROM table1 WHERE id NOT IN (SELECT id FROM table2)



Я не говорю, что надо вынести это в хранимую процедуру, просмотреть Execution plan, подобрать индексы. Но просто написать-то даже новичок сможет, разве нет?
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39514093
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13th,

ему это было сразу предложено ) но видимо там работают по принципу "хуяк, хуяк, в продакшн"
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39514203
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bujhm_CВсе запросы держу у себя в проекте а не серваке. Мне так удобно. По скорости выполнения не тестил, но на мой взгляд, выполняется достаточно быстро.

Надо сказать, что вопрос, вообще-то не в тему форума, это вопрос чисто по T-SQL-у. Соответствующий раздел на форуме есть.
А то, что автор опубликовал тему не там, где надо, а там, куда привык - "Мне так удобно" (с). Не проявил вежливость, выбрав бы SQL из VB-текста - "Мне так удобно" (с). Ну и как школьник - сразу в обидки кидаться, что не все сразу бросились тебе помогать - "Мне так удобно" (с).

Ну если тебе удобно писать как дилетант, на костылях и наотъебись - это твоё личное дело. Но эту философию не все тут разделяют.
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39514241
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes13th,

ему это было сразу предложено ) но видимо там работают по принципу "хуяк, хуяк, в продакшн"

"бэйсик, бэйсик и в продакшн"
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39514266
Bujhm_C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"Лучше промолчать и показаться дураком, чем что то сказать и окончательно развеять все сомнения"
...
Рейтинг: 0 / 0
Объеденить два запроса на ходу
    #39514278
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bujhm_C"Лучше промолчать и показаться дураком, чем что то сказать и окончательно развеять все сомнения"
Развеял, поздравляю
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Объеденить два запроса на ходу
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]