0

質問があります:

SELECT [Theme].[PK_Theme], [Theme].[Name], [ThemeType].[Type] 
  FROM [Theme] 
  LEFT OUTER JOIN [ThemeType] 
    ON [Theme].[ThemeTypeId] = [ThemeType].[PK_ThemeType] 
  JOIN [ProductTheme] ON [ProductTheme].[ThemeId]=[Theme].[PK_Theme] 
 WHERE ProductTheme.ProductID LIKE '%'
   AND ProductTheme.ThemeId = Theme.PK_Theme 
   AND COALESCE([THEME].[THEMETYPEID], 'null') LIKE '%'
 GROUP BY [Theme].[Name], [ThemeType].[Type], [Theme].[PK_Theme] 
 ORDER BY CASE WHEN [ThemeType].[Type] IS NULL THEN 0 ELSE 1 END, [Theme].[Name]

LIKEが存在する理由は、'%'実際には asp.net サーバー コントロールを使用してパラメータ化されているためです。

このクエリの結果は次のとおりです。

ここに画像の説明を入力

返されたすべてのデータを表示することはできませんが[Theme].[Name]、2 つのセグメント内でアルファベット順に並べられています。に関連付けられている主キーです。[ThemeType].[Type]NULL[Theme].[PK_Theme][Theme].[Name]

ThemeTypeIdテーブルが関連付けられる方法は、テーブルの主キーの外部キーであるという名前の列がテーマにあることThemeTypeです。

ここに私の問題があります。現在ThemeTypeIdVARCHAR(50)データ型であり、INT. 問題は次のとおりです。

COALESCE([THEME].[THEMETYPEID], 'null')

これにより、次のエラーが発生します。

varchar'NULL'をデータ型に変換するときに変換に失敗しましたint

ただし、何も返されない場合は何も返されません。0 に変更すると、上記で以前に達成されたように NULL` と非 Null のみがnull返されます。どうすればいいですか?NULLNULL's are returned. I need both

4

2 に答える 2

1

明らかなことは、行を削除することです

AND COALESCE([THEME].[THEMETYPEID], 'null') LIKE '%'

where条項から。はlikeを実行しており、とにかく値is not nullを変換しています。NULLしたがって、行は必要ありません。

それができないなら、これはできますか?

AND COALESCE(cast([THEME].[THEMETYPEID] as varchar(255)), 'null') LIKE '%'

それともこれ?

AND [THEME].[THEMETYPEID] is not null
于 2013-08-02T14:05:05.690 に答える