我有一个查询:
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]
存在 s的原因LIKE
是因为 s'%'
实际上是使用 asp.net 服务器控件进行参数化的。
此查询结果如下:
您看不到所有返回的数据,但[Theme].[Name]
在两个段中按字母顺序排列,第一个在哪里[ThemeType].[Type]
,NULL
然后它不为空。[Theme].[PK_Theme]
是与 关联的主键[Theme].[Name]
。
表关联的方式是 Theme 有一个名为的列ThemeTypeId
,它是表上主键的外键ThemeType
。
现在这是我的问题,目前ThemeTypeId
是VARCHAR(50)
数据类型,我需要它是INT
. 我看到问题是:
COALESCE([THEME].[THEMETYPEID], 'null')
这会导致以下错误:
varchar
将值转换'NULL'
为数据类型时转换失败int
。
但是,如果我更改null
为空NULL
,则返回任何内容,如果我将其更改为 0,则仅NULL's are returned. I need both
返回 NULL` 和非 Null,如前面完成的那样。我该怎么做呢?