|
|
#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"Подскажите, в чем дело? |
|
|
|
|
#2 |
|
drc
|
В конце запроса нет кавычек -- это описка.
Думаю, дело вот в чем: т.к. запрос я отлаживал на базе SQL Server, а реально обращаюсь через ODBC к *.dbf у которого возможны отклонения от стандартного ANSI. |
|
|
|
|
#3 |
|
Administrator
|
И снова здраствуйте :)
Дык косяк заключается в том, что обработка данных идет драйвером ODBC, а не SQL Server. Я в свое время говорил где нужно отлаживать запросы ODBC, однако, возможно, была допущена ошибка при построении связи...
В частности ODBC не поддерживает оператор CAST. А Аксапта вылетает, т.к. драйвер ODBC не смог исполнить запрос. В то же самое время, SQL Server понимает оператор CAST и поэтому запрос прокатывает |
|
|
|
|
#4 |
|
drc
|
:)
Нет ошибки в связи не было. Я то думал что различий в SQL у ODBC и SQL Server нет.
|
|
|
|
|
#5 |
|
Участник
|
Хм..
Скажем так, ODBC драйвер к dbf не поддерживает этот оператор CAST. Это как в анекдоте: "ODBC большой..." |
|
|
|
|
#6 |
|
Участник
|
Можно использавать convert
Например так: stmt.executeUpdate( 'insert into TmpParm (CountRecord, recid , dataareaid) ' + 'select count(*) as CountRecord, ' + ' convert(int,'+int2str(beginRecId)+') AS recid ,' + ' \''+dataareaid+'\' as DATAAREAID ' + sqlStr +';' ); |
|
|