在同一查询的LIKE中使用标量函数

时间:2012-01-31 09:59:21

标签: sql-server sql-server-2008 tsql

我有两张表如下:

CREATE Spaces (spaceID int, spaceName nvarchar(20)) TABLE
CREATE Hurdles( hurdleID int, aptID int, floorID int) TABLE

另外,我有一个名为fsGetAptName的标量函数,它接受一个floorID和一个aptID并返回一个nvarchar(2)字符串。

我想创建一个从Hurdles函数的每一行获取aptID和floorID的查询,并使用函数的返回值在Spaces表上使用带有LIKE'%'的WHERE子句中的spaceNAME获取spaceID returnValueFromScalarFunction +'%'

这可以在一个查询中完成,还是我需要在表函数的循环中运行它?

由于

1 个答案:

答案 0 :(得分:2)

  1. 在跨栏上创建一个计算列 UDF会破坏性能,更好地在表中预生成
  2. 只需加入2个表格。不需要循环
  3. 使用领先的通配符预期垃圾性能
  4. 所以,像这样

    ALTER TABLE Hurdles
        ADD AptNameSearch = '%' + (some expression here) + '%' PERSISTED
    GO
    
    
    SELECT ...
    FROM
        Hurdles H
        JOIN
        Spaces S ON S.spaceName LIKE H.AptName
    WHERE
        ...