|
Получение таблицы запросом SQL | ☑ | ||
---|---|---|---|---|
0
nAPACEHAK
20.06.24
✎
17:59
|
Фрагмент получения таблицы:
Таблица = Новый ТаблицаЗначений; // Создание объекта команды и установка параметров cmd = Новый COMОбъект("ADODB.Command"); cmd.CommandTimeout = 0; cmd.ActiveConnection = Con; cmd.CommandText = ТекстЗапроса; // Выполнение запроса и получение результатов Попытка rs = cmd.Execute(); Исключение Сообщить("Ошибка выполнения запроса: " + ОписаниеОшибки()); Возврат Таблица; КонецПопытки; // Проверка, что объект Recordset открыт Если rs.State <> 1 Тогда Сообщить("Ошибка: Recordset не открыт."); Возврат Таблица; КонецЕсли; если взять простой ТекстЗапроса, например, SELECT TOP (10) [_IDReceipt] FROM [test_db_pbi].[dbo].[fc_sale] то по результату я получу таблицу, но при попытке выполнения более сложного запроса (прикреплю ко 2му сообщению) - rs.State = 0 и соответственно таблицы нет трассировка rs вся пестрит таким: EditMode Произошла исключительная ситуация (ADODB.Recordset): Операция не допускается, если объект закрыт. по точке останова, если скопировать сформированный ТекстЗапроса и вставить его в MS SQL Studio - запрос отрабатывает корректно, получает таблицу данных Подскажите, куда копнуть? |
|||
1
nAPACEHAK
20.06.24
✎
17:36
|
IF OBJECT_ID('tempdb..#втТаб') IS NOT NULL DROP TABLE #втТаб;
DECLARE @Таб TABLE ( ut_guid_articul NCHAR(300), ut_guid_size CHAR(36), SellingPrice NUMERIC(15,2), QuantitySold NUMERIC(5,0), RetailValue NUMERIC(15,2), TransactionNumber NCHAR(150), DateTime DATETIME2(7), SalesAssistant NCHAR(300) ); INSERT INTO @Таб (ut_guid_articul, ut_guid_size, SellingPrice, QuantitySold, RetailValue, TransactionNumber, DateTime, SalesAssistant ) VALUES ('6810dd1c-51fd-11ee-bcaa-7c10c9c21623', '7837e268-5e00-11ee-bcaa-7c10c9c21623', '15223.93', '1', '15223.93', 'Отчет комиссионера о продажах Т0000000058 от 17.03.2024 23:59:59', '17.03.2024 23:59:59', 'Михаил Евгеньевич'), ('f4f31534-b123-11ea-8141-000c297b8a84', '444260ed-b138-11ea-8141-000c297b8a84', '19029', '1', '19029', 'Реализация товаров и услуг SP000002603 от 01.04.2024 23:59:59', '01.04.2024 23:59:59', 'Арина Николаевна'); CREATE TABLE #втТаб ( ut_guid_articul NCHAR(300), ut_guid_size CHAR(36), SellingPrice NUMERIC(15,2), QuantitySold NUMERIC(5,0), RetailValue NUMERIC(15,2), TransactionNumber NCHAR(150), DateTime DATETIME2(7), SalesAssistant NCHAR(300) ); INSERT INTO #втТаб (ut_guid_articul, ut_guid_size, SellingPrice, QuantitySold, RetailValue, TransactionNumber, DateTime, SalesAssistant) SELECT ut_guid_articul, ut_guid_size, SellingPrice, QuantitySold, RetailValue, TransactionNumber, DateTime, SalesAssistant FROM @Таб; -- Проверяем, существует ли временная таблица #TabResultsProduct, и если существует, удаляем её IF OBJECT_ID('tempdb..#TabResultsProduct') IS NOT NULL DROP TABLE #TabResultsProduct; -- Создаем временную таблицу #TabResultsProduct CREATE TABLE #TabResultsProduct ( ut_guid_articul CHAR(36), ut_guid_size CHAR(36), _IDProductArticle CHAR(36), _IDProductSize CHAR(36), ProductArticle NVARCHAR(100), ProductName NVARCHAR(100), SellingPrice NUMERIC(15,2), QuantitySold NUMERIC(5,0), RetailValue NUMERIC(15,2), TransactionNumber NCHAR(150), DateTime DATETIME2(7), SalesAssistant NCHAR(300) ); -- Вставляем данные в временную таблицу #TabResultsProduct INSERT INTO #TabResultsProduct (ut_guid_articul, ut_guid_size, _IDProductArticle, _IDProductSize, ProductArticle, ProductName, SellingPrice, QuantitySold, RetailValue, TransactionNumber, DateTime, SalesAssistant) SELECT #втТаб.ut_guid_articul, #втТаб.ut_guid_size, mapping_guid_retail_ut.retail_guid_articul AS _IDProductArticle, mapping_guid_retail_ut.retail_guid_size AS _IDProductSize, dim_product.ProductArticle, dim_product.ProductName, #втТаб.SellingPrice, #втТаб.QuantitySold, #втТаб.RetailValue, #втТаб.TransactionNumber, #втТаб.DateTime, #втТаб.SalesAssistant FROM #втТаб LEFT JOIN mapping_guid_retail_ut ON #втТаб.ut_guid_articul = mapping_guid_retail_ut.ut_guid_articul AND #втТаб.ut_guid_size = mapping_guid_retail_ut.ut_guid_size LEFT JOIN dim_product ON mapping_guid_retail_ut.retail_guid_articul = dim_product._IDProductArticle; select * from #TabResultsProduct DROP TABLE #втТаб; DROP TABLE #TabResultsProduct; да, на текущий момент в конце там ВТ, т.к. есть продолжение, роли не играет там в конце даже если SELECT TOP (10) [_IDReceipt] FROM [test_db_pbi].[dbo].[fc_sale] поставить - то точно такое же поведение use вначале и drop в конце - убирал, изменений нет |
|||
2
H A D G E H O G s
20.06.24
✎
20:08
|
SET NOCOUNT ON
|
|||
3
Franchiser
21.06.24
✎
00:52
|
(0) set nocount on, каждую инструкцию можно выполнять отдельным execute(), не обязательно делать длинный запрос, не задан commandtype
|
|||
4
Franchiser
21.06.24
✎
01:03
|
И зачем ты делаешь дополнительно переменную @Таб не понятно: можно стразу писать в #ВтТаб
|
|||
5
nAPACEHAK
21.06.24
✎
08:07
|
(2) (3) Спасибо, мил человек
(4) это от недостатка опыта в SQL запросах (( |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |