我有一个 T-SQL 存储过程,它向 .NET 页面上的网格提供大量数据......以至于我在页面顶部选择了“0-9”和每个字母字母表,以便当用户单击字母时,我想根据以该第一个字母开头的结果过滤我的结果。假设我们正在使用产品名称。因此,如果用户单击“A”,我只希望我的存储过程返回 SUBSTRING(ProductName, 1, 1) = “A”的结果。
我被挂断的地方是以数字开头的产品名称。在这种情况下,我想获取 ISNUMERIC(SUBSTRING(ProductName, 1, 1)) = 1 的所有 ProductName 值。我正在使用一个名为 @FL 的输入参数。@FL 要么为零(我们很少有以数字开头的产品,所以我把它们放在一起)。
当然还有 WHERE SUBSTRING(ProductName, 1, 1) IN ('0', '1', '2'.....) 的替代方案,但即便如此,我也无法设计 CASE 语句这将对一个评估执行 = 并为另一个评估执行 IN 语句。
这是我在我的过程中为我的 WHERE 子句的 CASE 部分所拥有的内容。它不起作用,但如果仅从伪代码的角度来看,它可能是有价值的。
提前感谢您的任何想法。
AND CASE @FL
WHEN "0" THEN
CASE WHEN @FL = "0" THEN
isnumeric(substring(dbo.AssnCtrl.Name, 1, 1)) = 1
ELSE
SUBSTRING(dbo.AssnCtrl.Name, 1, 1) = @FL
END
END
*** 我知道 CASE 语句的这种用法是“非标准的”,但我在网上找到它并认为它有一些承诺。但是尝试使用单个 CASE 语句会产生相同的结果('=' 附近的错误)。