0

我正在使用在 gridview 上使用的查询来选择要显示的数据:

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 @productParam 
AND ProductTheme.ThemeId = Theme.PK_Theme 
AND COALESCE([THEME].[THEMETYPEID], 'null') LIKE @assignedParam 
GROUP BY [Theme].[Name], [ThemeType].[Type], [Theme].[PK_Theme] 
ORDER BY CASE WHEN [ThemeType].[Type] IS NULL THEN 0 ELSE 1 END, [Theme].[Name]

[THEME].[THEMETYPEID] 列以前是 varchar(50),但已更改为 int。

我现在收到此错误:

Conversion failed when converting the varchar value 'NULL' to data type int.

奇怪的一件事是我直接查询服务器上面的语句有效,(我改变了值的参数)但它在服务器控件中不起作用。

更新的列允许空值。如何在此 curcumstance 中检查 Null 是否为 int 并让查询像以前一样工作?

编辑如果两个参数都分配了“%”,我希望结果是这样的:

在此处输入图像描述

4

2 回答 2

3

这一行:

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

应该是(没有单引号):

AND COALESCE([THEME].[THEMETYPEID], NULL) LIKE @assignedParam 

因为'null'是一个普通字符串,而您可能打算表示一个NULL

或者,也许您应该将其更改为:

AND COALESCE([THEME].[THEMETYPEID], 0) LIKE @assignedParam 

由于 ThemeTyeID 是一个 int 

更新:

尝试这个:

 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 @productParam
                AND ProductTheme.ThemeId = Theme.PK_Theme
                AND 1 = CASE WHEN [THEME].[THEMETYPEID] IS NULL THEN 1
                             WHEN [THEME].[THEMETYPEID] LIKE @param THEN 1
                        END
        GROUP BY [Theme].[Name] ,
                [ThemeType].[Type] ,
                [Theme].[PK_Theme]
        ORDER BY CASE WHEN [ThemeType].[Type] IS NULL THEN 0
                      ELSE 1
                 END ,
                [Theme].[Name]

但是我们警告说,如果这如您所愿,它不会像为每种情况编写单独的查询那样有效。也许联合他们......

于 2013-08-02T13:24:45.330 回答
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 @productParam 
AND ProductTheme.ThemeId = Theme.PK_Theme AND [Theme].[ThemeTypeId] IS NOT NULL 
AND COALESCE([THEME].[THEMETYPEID], 'null') LIKE @assignedParam 
GROUP BY [Theme].[Name], [ThemeType].[Type], [Theme].[PK_Theme] 
ORDER BY CASE WHEN [ThemeType].[Type] IS NULL THEN 0 ELSE 1 END, [Theme].[Name]
于 2013-08-02T13:21:51.797 回答