Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.031 c
1-1157509175
dimon1
2006-09-06 06:19
2006.10.15
Нужна помощь


15-1159255048
Экспериментатор
2006-09-26 11:17
2006.10.15
Перемешались знаки препинания, звездочки кавычки


8-1142918795
mobila
2006-03-21 08:26
2006.10.15
ограничить перемещение мыши


2-1159542104
DROWSY
2006-09-29 19:01
2006.10.15
Как запретить многократный запуск процесса?


1-1157551934
Krants
2006-09-06 18:12
2006.10.15
"Freeze Panes" Exel




   Наверх