sql-server - SQL Server 存储过程中的 CASE 语句出现问题

标签 sql-server sql-server-2008 sql-server-2008-r2

我刚刚开始在 sql server 中使用存储过程并且进展得相当不错,但是我现在遇到了一个我无法理解的问题。我一直在寻找答案,但说实话,我不确定我问的是正确的问题。

我的 sp 是:

ALTER PROCEDURE [FindName]
    @Square nvarchar(100) = null,
    @Location nvarchar(100) = null,
    @Name nvarchar(100) = null,
    @NormalizedName nvarchar(100) = null,
    @SharedLand int = 0,
    @FieldNumber int = 0,
    @Description nvarchar(255) = null,
    @Dwelling nvarchar(100) = null
AS

BEGIN
    SELECT * FROM [Holdings]
    WHERE 
        ([Square] LIKE @Square OR @Square IS NULL)
        AND ([Location] = @Location OR @Location IS NULL)
        AND ([Name] LIKE @Name OR @Name IS NULL)
        AND ([NormalizedName] LIKE @NormalizedName OR @NormalizedName IS NULL)
        AND ([SharedLand] = @SharedLand OR @SharedLand = 0)
        AND ([FieldNumber] = @FieldNumber OR @FieldNumber = 0)
        AND ([Description] LIKE @Description OR @Description IS NULL)
        AND ([Dwelling] LIKE @Dwelling OR @Dwelling IS NULL)
        ORDER BY
            CASE WHEN (@NormalizedName IS NOT NULL) THEN [NormalizedName]
            ELSE [No]
        END
END

使用任何或所有参数(不带 CASE 但使用 CASE 语句)的所有 EXEC 都可以正常工作,以下工作:

EXEC FindName @Square = '%D%'
EXEC FindName @SharedLand = 1

但是当我尝试时:

EXEC dbo.cafgFindName @NormalizedName = '%Thomas%'

我收到错误: 将 nvarchar 值“Thomas”转换为数据类型 int 时转换失败。

我不明白的是转换发生在哪里,如果这确实是问题所在。

任何建议表示赞赏。

最佳答案

这是因为 CASE 语句必须解析为单一类型。在这种情况下(没有双关语:)您正在考虑使用 nvarchar 或 int (我认为 [No] 是 int)。

请参阅此处了解更多详细信息: Order by and Different Types in a CASE

关于sql-server - SQL Server 存储过程中的 CASE 语句出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15305925/

相关文章:

sql-server - 在 SQL Server 中将 INT 转换为 BIGINT

sql-server-2008 - SQL Server 组合结果集

hibernate - 使用MS Sql Server 2008进行Grails/hibernate -有任何问题吗?

sql - 选择嵌套 JSON 数组包含特定值的行

sql - 如何用另一个表的列值更新列?

sql-server - 如何对 SQL Server 2008 数据透视结果列和行进行排序?

sql - NVARCHAR(?) 用于 SQL Server 中的电子邮件地址

sql-server - SQL Server 中有用的非系统过程

c# - SMO.Restore.SqlRestore 有时会在部署的计算机上引发超时异常

sql-server - 带逗号和句点的 SQL Server 2005 货币格式