在select查询中使用SET语句

时间:2013-12-18 06:28:48

标签: sql sql-server sql-server-2008-r2

这是我的情景。我有一个具有选择查询的存储过程。

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

where子句中的Z是函数的计算值。

dbo.function始终返回单个值。

我不想在where子句中使用该函数。我想将值设置为变量并在where子句中使用该变量。

应该怎么做?请帮助。

3 个答案:

答案 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

答案 1 :(得分:0)

DECLARE @MyVar INT
SELECT  @MyVar = dbo.function(parameters)

SELECT  somethings
FROM    tables
WHERE   field = @MyVar

答案 2 :(得分:0)

根据您的要求,您可以使用select inside select,steady =)

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