0

我有以下有效的查询:

SELECT 
  STUFF
  (
    (
      SELECT
        ', ' + RTRIM(LTRIM(ulastname))
      FROM 
        ROOM r LEFT JOIN person p ON p.hmy = r.hmyperson
      WHERE 1=1 
        AND r.hmytenant = t.hmyperson
      FOR XML PATH('')
    )
  , 1 
  , 2 
  , ''
  )
FROM unit u
  LEFT JOIN tenant t ON u.hproperty = t.hproperty
WHERE 1=1
  AND t.hmyperson = 71
  AND u.hmy = 19

但是,我需要做的是在最里面的 select 语句中使用一个函数来返回正确的值。我编写了如下查询:

SELECT 
  STUFF
  (
    (
      SELECT 
        ', ' + RTRIM(LTRIM(fullname))
      FROM 
        SMS_All_Occupants(u.hmy, 'Y', t.hmyperson) occ
      WHERE 1=1 
        AND TYPE = 'T' 
        AND LESSEE = 'Y'
      ORDER BY 
        occ.relation asc
      FOR XML PATH('')
    )
  , 1 
  , 2 
  , ''
  )
FROM unit u
  LEFT JOIN tenant t ON u.hproperty = t.hproperty
WHERE 1=1
  AND t.hmyperson = 71
  AND u.hmy = 19

此查询总是以“'.' 附近的语法不正确”而失败,这似乎与传递给函数的 u.hmy 和 t.hmyperson 有关。如果我为这些参数中的每一个输入一个实际值,它就可以正常工作。

有人可以告诉我我做错了什么吗?我已经看到使用交叉连接的参考,但我不知道如何进行这项工作。

谢谢!!

4

1 回答 1

0

DB Compatibility level 还是“80”吗?如果是这样,您不能将列用作 UDF 参数

更多信息:在 T-SQL 查询的 SELECT 子句中使用表值函数的“语法不正确”

于 2013-05-13T14:04:47.933 回答