Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:如何避免在单个查询中调用多个函数?_Sql_Sql Server 2008 - Fatal编程技术网

SQL:如何避免在单个查询中调用多个函数?

SQL:如何避免在单个查询中调用多个函数?,sql,sql-server-2008,Sql,Sql Server 2008,我有一个查询,它接受标量值函数两次,一次在选择列表的字段中,另一次在连接条件中。我的问题是,如何避免在单个查询中调用该函数? 谢谢 使用CTE with cte as ( select id, calculated = myFunction(field1, field2) from table1 ) select id, field1, field2, calculated from ta

我有一个查询,它接受标量值函数两次,一次在选择列表的字段中,另一次在连接条件中。我的问题是,如何避免在单个查询中调用该函数? 谢谢

使用CTE

with cte 
as 
(
    select
        id,
        calculated = myFunction(field1, field2)
    from
        table1
)
select
    id,
    field1,
    field2,
    calculated
from
    table1
inner join
    cte on cte.id = table1.id
where 
    cte.calculated = @someCondition
或子查询

select
    id,
    field1,
    field2,
    calculated
from
(
    select 
        field1,
        field2,
        calculated = myFunction(field1, field2)
    from
        table1
) t
where
    calculated = @someCondition
使用CTE

with cte 
as 
(
    select
        id,
        calculated = myFunction(field1, field2)
    from
        table1
)
select
    id,
    field1,
    field2,
    calculated
from
    table1
inner join
    cte on cte.id = table1.id
where 
    cte.calculated = @someCondition
或子查询

select
    id,
    field1,
    field2,
    calculated
from
(
    select 
        field1,
        field2,
        calculated = myFunction(field1, field2)
    from
        table1
) t
where
    calculated = @someCondition

问:请举例说明SQL?问:是什么让你认为在同一个查询中调用一个函数两次一定是件坏事?如果这是该语句所需要的,并且它只会导致对服务器的一次调用,那么这就是最佳做法!低质量,请提供一个示例选择i.Id,i.Name。dbo.IsItemCaproved(C.Id)为[状态]。从@Item i开始,在C.ItemId=i.Id和C.Deadline上加入卡C,并且dbo.isitemcaproved(C.Id)=“False”和C.IsDeleted=0您可以编辑您的问题。并设置问题中的代码格式(使用
{}
)。如果你已经建议进行编辑,你只需要批准它就行了?问:是什么让你认为在同一个查询中调用一个函数两次一定是件坏事?如果这是该语句所需要的,并且它只会导致对服务器的一次调用,那么这就是最佳做法!低质量,请提供一个示例选择i.Id,i.Name。dbo.IsItemCaproved(C.Id)为[状态]。从@Item i开始,在C.ItemId=i.Id和C.Deadline上加入卡C,并且dbo.isitemcaproved(C.Id)=“False”和C.IsDeleted=0您可以编辑您的问题。并设置问题中的代码格式(使用
{}
)。如果已经建议进行编辑,您只需批准即可。