Ошибка деления на ноль Только при использовании параметра в предложении where - PullRequest
0 голосов
/ 11 сентября 2018

Есть две таблицы, Внешняя таблица A и Просмотр таблицы B . Данные во внешней таблице связаны с Hadoop через Polybase. Представление таблицы объединяет все внешние таблицы A и другие внешние таблицы (аналогичные A).

Например:

A:
--------------------
number  | time
--------------------
0       |2018-09-10
1       |2018-09-10
2       |2018-09-10
--------------------

B:
--------------------
number  | time
--------------------
0       |2018-09-10
1       |2018-09-10
2       |2018-09-10
3       |2018-09-11
--------------------

Теперь я не знаю, почему под SQL результаты отличаются?

И я нахожу другой порядок выполнения в этих SQL. В случаях 1 и 2 «выберите 5.0 / номер» выполняется первым. В случаях 3 и 4, где сначала выполняется предложение.

кейс 1

DECLARE @date datetime ='2018-09-10';
select 5.0/number  
from A 
where time = @date and number > 0 

Result: 
Cannot execute the query "Remote Query" against OLE DB provider "SQLNCLI11" for linked server "(null)". [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Divide by zero error encountered.

дело 2

DECLARE @date datetime ='2018-09-10';
select 5.0/temp.number 
from
(
    select number as number 
    from A
    where time = @date and number > 0 
)temp

Result: 
Cannot execute the query "Remote Query" against OLE DB provider "SQLNCLI11" for linked server "(null)". [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Divide by zero error encountered.

кейс 3

select 5.0/number 
from A 
where time = '2018-09-10' and number > 0 

Result:
5.0
2.5

корпус 4 (из B)

DECLARE @date datetime ='2018-09-10';
select 5.0/number  
from B
where time = @date and number > 0 

Result:
5.0
2.5

Спасибо !!

1 Ответ

0 голосов
/ 11 сентября 2018

Это также приводит к ошибке?

DECLARE @date datetime ='2018-09-10';
select 5.0/temp.number 
from
(
    select time, number
    from A
    where number > 0 
)temp
where temp.time = @date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...