Имя: Пароль:
1C
1С v8
1c 8.3 прямой запрос mssql с параметром-таблицей
0 Бархат
 
07.07.17
21:11
Всем привет.

Ребята, подскажите, пожалуйста, как можно сделать прямой запрос к скулю с уже имеющейся таблицей в виде параметра.

ну вообще задача... есть список просроченных паспортов. Загнал его в скуль. Формирую список паспортов из контров и нужно сличить его. Хочу сделать inner join, но не знаю как подсунуть свой список документов с контрами в скуль.

Натолкните на мысль.
Спасибо.
1 Бархат
 
07.07.17
21:16
мож там временную таблицу какую можно создать или еще как выкрутиться?
2 NuclearWinter
 
07.07.17
21:55
Использовать внешние источники данных например?
3 Fram
 
07.07.17
22:20
(1) если есть возможность закинуть текстовый файлик на общий с сервером бд ресурс, тогда выгружай в файл с разд из 1с а потом через bulk insert во врем табл в скуле. Работает очень быстро
4 Fram
 
07.07.17
22:25
Обратный результат лучше через ADO GetRows(). В 1с получается массив. Его преобразуем в ТЗ и дальше крути верти в запросах.
5 МихаилМ
 
08.07.17
00:59
(0)
создайте временную таблицу в неё вставьте записи паспортов
запросом получите выборку совпадений
6 МихаилМ
 
08.07.17
01:06
+(5) на всяки случай удалите временную таблицу. так культурней.
7 Бархат
 
08.07.17
11:27
(6) наверное так и буду делать. (3) Текстовый файлик весит 1,2 Гб с 107 млн записей.

(6) Единственное что, делать таблицу буду наверное с каким-нибудь индексом организации (id какой-нибудь, несколько организаций могут проверять одновременно) и потом удалять таблицу.

Тут вопрос еще, вот при создании таблицы нужно записать около 1,2 тыс строк. Это делать в цикле insert-ами или иначе как-то можно?
8 mexanik_96
 
08.07.17
11:34
(7) да уж конечно. не смеши какой цикл. читай про merge
9 МихаилМ
 
08.07.17
12:20
(7)
у Вс же была уже тема пол года назад
про тоже самое

Поиск в очень большом текстовом файле (1,2 Гб)
10 Бархат
 
08.07.17
12:22
Да, но там было про файловую систему. с Jet ом подсказали очень здорово! и работало нормально, но сейчас базы собираем на один серв и переделываю механизм.
11 youalex
 
08.07.17
12:35
(7) можно через xml. в 1с сформировать xml  примерно такой:

<root>
    <row uid="972ce6b0-dede-4980-8106-c79c6b44d1ce" PASSP_SERIES="1234" PASSP_NUMBER="123456"/>
    <row uid="2e64a032-5f7e-4a56-a42d-d1501f90a40a" PASSP_SERIES="1234" PASSP_NUMBER="123456"/>
</root>


в скуле запихнуть его в темп и соединить с исходной таблицей:

declare @xmlDoc xml
set @xmlDoc = 'тут строка xml'

DECLARE @idoc int
EXEC sp_xml_preparedocument @idoc OUTPUT, @xmlDoc;


SELECT    *  
INTO #temp
FROM       OPENXML (@idoc, '/root/row',1)  
            WITH (uid  varchar(36),  
                  PASSP_SERIES varchar(4),
                  PASSP_NUMBER varchar(6));
                  
select tmp.*
    from     #temp tmp
    join Table_1 t ON tmp.PASSP_SERIES = t.PASSP_SERIES
        AND tmp.PASSP_NUMBER = t.PASSP_NUMBER              



можно в хранимку этот скрипт запихнуть, на вход передавать строку xml (параметр)
12 МихаилМ
 
08.07.17
12:39
изучайте метод AddNew класса рекордсет

дальше https://www.mssqltips.com/sqlservertip/1704/using-merge-in-sql-server-to-insert-update-and-delete-at-the-same-time/
13 Fram
 
08.07.17
20:15
(7) а я (3) для кого написал?
14 Бархат
 
09.07.17
14:31
(13) ДА!!! отработало. В скуле всё норм. осталось в 1с забить создание базы, скрипты скульные и дропать.

35 сек на запрос. А на Jet работало минуты 2-3