我刚刚开始在 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 时转换失败。
我无法理解的是转换发生在哪里,如果这确实是问题。
任何建议表示赞赏。