gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:11:50 24 4
gpt4 key购买 nike

我刚开始在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

所有 EXEC 使用任何或所有参数而不使用 CASE 但使用 CASE 语句时一切正常,以下工作:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com