Текущий архив: 2006.10.15;
Скачать: CL | DM;
ВнизSQL В MSSQL Найти похожие ветки
← →
Stanislav © (2006-09-22 13:33) [0]Почему в MSSQL не работает следующая конструкция:
Select A=([Filed1]*10), B=A*2
Хотя в SYBASE (родитель MSSQL) работает, да и в ACCESS от того же MS работает.
Понятно что без этого не сложно обойтись, но всеже интересно.
← →
StriderMan © (2006-09-22 13:36) [1]
> Почему в MSSQL не работает следующая конструкция:
> Select A=([Filed1]*10), B=A*2
и правильно. нечего ерундой маяццо.
← →
Ega23 © (2006-09-22 13:36) [2]
Set NoCount ON
Create Table #XXX (A int)
Insert into #XXX (A) Values (1)
Insert into #XXX (A) Values (2)
Insert into #XXX (A) Values (3)
Insert into #XXX (A) Values (4)
Insert into #XXX (A) Values (5)
Set NoCount OFF
Select A=A*10, B=A*2 from #XXX
Drop Table #XXX
Всё работает...
← →
Stanislav © (2006-09-22 13:39) [3]Ega23 © (22.09.06 13:36) [2]
:-)
в первой строке B=2, а должно 20.
← →
sniknik © (2006-09-22 13:40) [4]Ega23 © (22.09.06 13:36) [2]
у тебя нет обращения по алиасу как в [0].
с алиасом действительно в аксессе работает а в mssql нет, что странно т.к. аналогичные продукты одной фирмы...
← →
Ega23 © (2006-09-22 13:41) [5]А, вон ты о чём...
Это тебе не excel, брат....
← →
Stanislav © (2006-09-22 13:42) [6]А в оракле работает?
← →
Stanislav © (2006-09-22 13:44) [7]Не Excel, но код был бы понятнее, а так приходится либо дублировать одно и тоже вычисление или делать вложеный запрос.
Интересно, а при дублировании одного и того же вычисления, оно и пересчитывается столько же раз?
← →
Ega23 © (2006-09-22 13:48) [8]
Set NoCount ON
Create Table #XXX (A int)
Insert into #XXX (A) Values (1)
Insert into #XXX (A) Values (2)
Insert into #XXX (A) Values (3)
Insert into #XXX (A) Values (4)
Insert into #XXX (A) Values (5)
Select A=A*10 into #XXX1 from #XXX
Set NoCount OFF
Select A, B=A*2 from #XXX1
Drop Table #XXX
Drop Table #XXX1
Вот так изгольнулся.
← →
Stanislav © (2006-09-22 13:51) [9]МОЖНО ТАК :-)
Set NoCount ON
Create Table #XXX (A int)
Insert into #XXX (A) Values (1)
Insert into #XXX (A) Values (2)
Insert into #XXX (A) Values (3)
Insert into #XXX (A) Values (4)
Insert into #XXX (A) Values (5)
Select A, B=A*2 from (Select A=A*10 from #XXX) AS Q
Drop Table #XXX
← →
Romkin © (2006-09-22 14:45) [10]
> в первой строке B=2, а должно 20.
Нет, не должно. Все вычисления выполняются параллельно по стандарту.
← →
evvcom © (2006-09-22 15:07) [11]> [6] Stanislav © (22.09.06 13:42)
Нет, не работает. А вот как в [9] тоже пройдет.
← →
Курдль © (2006-09-22 15:35) [12]
> Stanislav © (22.09.06 13:42) [6]
> А в оракле работает?
В DB2 AS/400 тоже не работает :(
Только такой:with T1 as (select ([FIELD]*10) as A from [TABLE])
select (A * 2) as B
from T1
В общем, фигни какие-то, а не СУБД :(
← →
Val © (2006-09-22 15:41) [13]>[6] Stanislav © (22.09.06 13:42)
нет.
← →
MOA © (2006-09-22 15:43) [14]>Почему ... не работает :
Есть ли разница:
SELECT [A]=([P]*10), [B]=2*[A] FROM ...
и
SELECT [B]=2*[A], [A]=([P]*10) FROM ...
Если есть - т.е. получаются разные В - про операции над множествами смело забываем - имеем замороченный императивный язык, отслеживающий порядок исполнения и т.д. А как с триггерами быть? Сколько раз их вызывать? В каком порядке? И т.д.
В принятой реализации SQL - разницы нет - берётся то значение, которое было ДО операции - всё логично.
Страницы: 1 вся ветка
Текущий архив: 2006.10.15;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.043 c