テーブルがあります
別のテーブルに結合されている
所有者は参加者になることができ、存在する場合は、同じ参照(ユーザーテーブルへ)が所有者と参加者にあります。だから私はやった:
SELECT TableA.Id,TableA.Owner,TableA.Text
FROM TableA
WHERE TableA.Owner=@User
UNION
SELECT TableA.Id,TableA.Owner.TableA.Text
FROM TableA LEFT JOIN TableB ON (TableA.Id=TableB.Id)
WHERE TableB.Participant = @User
このクエリは、特定の@Userが所有者または参加者、あるいはその両方であるすべての個別のデータセットを返す必要があります。
SQL Serverがスローしない場合
データ型textは、比較できないため、UNION、INTERSECT、またはEXCEPT演算子のオペランドとして使用できません。
IdはPKであり、Textは同じテーブルからのものであるため、SQL ServerがTextをまったく比較したくないのはなぜですか?
使うことができます UNION ALL
重複検出を停止しますが、結果の明確性を失うことなくこれを回避できますか?
正しい方法
TEXT
の使用を中止してください。廃止されました。テーブルスキーマを変更します。
ntext、text、およびimageデータ型は、Microsoft SQL Serverの将来のバージョンで削除される予定です。これらのデータ型を新しい開発作業で使用することは避け、現在それらを使用しているアプリケーションを変更することを計画してください。 代わりにnvarchar(max)、varchar(max)、およびvarbinary(max)を使用します。
回避策
NVARCHAR(MAX)
にキャスト:
SELECT TableA.Id,TableA.Owner, CAST(TableA.DescriptionText AS NVARCHAR(MAX))
FROM TableA
WHERE TableA.Owner=@User
UNION
SELECT TableA.Id,TableA.Owner, CAST(TableA.DescriptionText AS NVARCHAR(MAX))
FROM TableA LEFT JOIN TableB ON (TableA.Id=TableB.Id)
WHERE TableB.Participant = @User