2013-12-18 2 views
0

Это мой сценарий. У меня есть хранимая процедура с запросом select.Использование инструкции SET в запросе select

Select M ,X , Y, dbo.function(parameters) as Z 
from SomeTable 
where condition1 
and condition2 
and Z > SomeValue 

Z в предложении where - вычисленное значение из функции.

Функция dbo.function всегда возвращает одно значение.

Я не хочу использовать функцию в предложении where. Я хочу установить значение переменной и использовать эту переменную в предложении where.

Как это сделать? любезную помощь.

+0

Пожалуйста, покажите ур функции и ур общая зр –

+0

Если функция является детерминированным, он не должен» неважно, сколько раз это текстовое выражение появляется в запросе - его нужно просто вызывать один раз для каждой строки. –

ответ

1

Вы должны сделать что-то вроде

DECLARE @Z TYPE_GOES_HERE = dbo.function(parameters) 

Select M ,X , Y, @Z as Z 
from SomeTable 
where condition1 
and  condition2 
and  @Z > SomeValue 

Это будет работать только, если параметры, передаваемые в функцию не столбцы из таблицы. Если это зависит от вас, вы купите CTE. Что-то вроде

;WITH Vals AS (
    Select M ,X , Y, dbo.function(parameters) as Z 
    from SomeTable 
) 
SELECT * 
FROm Vals 
where condition1 
and  condition2 
and  Z > SomeValue 
0
DECLARE @MyVar INT 
SELECT @MyVar = dbo.function(parameters) 

SELECT somethings 
FROM tables 
WHERE field = @MyVar 
0

для ваших требований, вы можете использовать выбрать внутри выбора, установившийся =)

SELECT * FROM (
Select M ,X , Y, dbo.function(parameters) as Z 
from SomeTable 
where condition1 
and condition2 
) T1 
WHERE Z > SomeValue 
Смежные вопросы