问题
我正在尝试在 SQL Server 中编写一个存储过程来查找最佳匹配记录。给定 5 个输入参数 @A、@B、@C、@D 和 @E(均为 varchar50),它们对应于表中的 5 列 A、B、C、D 和 E,我想找到记录最匹配的列。所选记录中不匹配的每一列都应包含一个空格“ ”。
例如,如果我输入“Sony”、“PlayStation”、“Controller”、“Black”、“Damaged”,并且我的表包含以下列:
"Sony" "Playstation" "Unit" "Black" "Damaged"
"Sony" "Playstation" " " " " " "
它应该返回第二行,因为 2 个参数匹配并且对于不匹配的 3 个参数,有空格。我不想返回第一行,因为即使 4 个参数匹配,中间的参数也不匹配,而且它不是空格。如果它是一个空格,第一排将是赢家。
我的方法
我无法透露各种细节,但我的基本方法(注意我是 SQL 新手)是测试从最特定到最不特定的每个组合。所以我的查询看起来像这样:
-- start with most specific
SELECT * FROM dbo.Items WHERE
A = @A
B = @B
C = @C
D = @D
E = @E
-- if no matches, try next
IF @@ROWCOUNT = 0
SELECT * FROM dbo.Items WHERE
A = @A
B = @B
C = SPACE(1)
D = @D
E = @E
... etc.
就我而言,我只需要真正测试 16 种配置,因为其中一些排列永远不会存在。即便如此,这似乎是实现我想要的一种非常低效的方式。最重要的是,它甚至不起作用。由于正在进行一些自动修剪,因此与空格进行比较似乎是有问题的。无论如何,我目前的方法似乎效率低下并且不起作用 - 所以我向你寻求帮助。