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 互換性レベルは「80」のままですか? その場合、列を UDF パラメーターとして使用することはできません

詳細はこちら:T-SQLクエリのSELECT句でテーブル値関数を使用した「構文が正しくありません」

于 2013-05-13T14:04:47.933 に答える