24.09.2004, 09:58 | #1 |
drc
|
SQL Запрос
Доброго утра!
Я делаю импорт данных через ODBC, потому в код X++ вставляю реальные SQL запросы. Их предварительно отлаживаю в SQL Server. Так вот мой запрос: Код: SELECT mkart.sclad, mkart.nnum, spr_part.cena_f, SUM(mkart.koltek), (CAST(SUM(spr_part.cena_f)/SUM(mkart.koltek)AS NUMERIC(20,4))) FROM mkart INNER JOIN spr_part ON (mkart.grup = spr_part.grup) AND (mkart.nnum = spr_part.nnum) AND (mkart.partia = spr_part.code) WHERE (mkart.sclad IS NOT NULL) AND (mkart.partia IS NOT NULL) AND (mkart.koltek <> 0) GROUP BY mkart.sclad,mkart.nnum,spr_part.code,spr_part.cena_f HAVING SUM(mkart.koltek) <> 0" Подскажите, в чем дело? |
|
24.09.2004, 10:37 | #2 |
drc
|
В конце запроса нет кавычек -- это описка.
Думаю, дело вот в чем: т.к. запрос я отлаживал на базе SQL Server, а реально обращаюсь через ODBC к *.dbf у которого возможны отклонения от стандартного ANSI. |
|
24.09.2004, 11:39 | #3 |
Administrator
|
И снова здраствуйте :)
Дык косяк заключается в том, что обработка данных идет драйвером ODBC, а не SQL Server. Я в свое время говорил где нужно отлаживать запросы ODBC, однако, возможно, была допущена ошибка при построении связи...
В частности ODBC не поддерживает оператор CAST. А Аксапта вылетает, т.к. драйвер ODBC не смог исполнить запрос. В то же самое время, SQL Server понимает оператор CAST и поэтому запрос прокатывает |
|
24.09.2004, 11:57 | #4 |
drc
|
:)
Нет ошибки в связи не было. Я то думал что различий в SQL у ODBC и SQL Server нет.
|
|
24.09.2004, 12:04 | #5 |
Участник
|
Хм..
Скажем так, ODBC драйвер к dbf не поддерживает этот оператор CAST. Это как в анекдоте: "ODBC большой..." |
|
24.09.2004, 12:15 | #6 |
Участник
|
Можно использавать convert
Например так: stmt.executeUpdate( 'insert into TmpParm (CountRecord, recid , dataareaid) ' + 'select count(*) as CountRecord, ' + ' convert(int,'+int2str(beginRecId)+') AS recid ,' + ' \''+dataareaid+'\' as DATAAREAID ' + sqlStr +';' ); |
|