回答

收藏

如何避免使用不确定数量的参数?SQL?

技术问答 技术问答 95 人阅读 | 0 人回复 | 2023-09-13

我有一个类似于我使用的数据库StackOverflow基于存储过程的标记系统。WHERE为了找到结果,句子中未确定数量的标签。可能有0到10个标签之间的任何位置来过滤结果。因此,例如,用户可能正在搜索
  V, f- J( |; @& M8 Dapple”,“ orange”和“ banana标签商品, 每个
) f- z  `; N+ J5 X4 q$ ^& Y结果必须包含所有三个标签。我的查询变得更加复杂,因为我必须处理一个用于标记的交叉引用表,但为了这个问题,我不会重复。/ {8 A) V% E4 c6 z8 \
我知道我可以做一些字符串操作exec()函数提供查询来解决这个问题,但我宁愿不解决和动态SQL相关性能问题。我认为最好是SQL为存储的proc缓存查询计划。
3 y0 @, y' k/ n3 A/ @在这种情况下,你使用了哪些技术来避免动态SQL?
% @: N4 ]: p$ J1 c* p% L$ T根据公众的需求,这是我正在使用的查询:; n9 q8 L% j% k+ K3 ]; E8 M  a
SELECT ft.[RANK],s.shader_id,s.page_name,s.name,s.description,s.download_count,s.rating,s.price FROM shader s INNER JOIN FREETEXTTABLE(shader,*,@search_term) AS ft ON s.shader_id = ft.[KEY]WHERE EXISTS(SELECT tsx.shader_id FROM tag_shader_xref tsx INNER JOIN tag t ON tsx.tag_id = t.tag_id WHERE tsx.shader_id = s.shader_id AND t.tag_name = 'color')AND EXISTS(SELECT tsx.shader_id FROM tag_shader_xref tsx INNER JOIN tag t ON tsx.tag_id = t.tag_id WHERE tsx.shader_id = s.shader_id AND t.tag_name = 'saturation')ORDER BY ft.[RANK] DESC这是一个功能性但硬编码。你会看到我设置了它来查找它’color’和’saturation’标签。
8 r0 j1 G$ R0 G# ^6 C                                                                1 d" A/ h  H3 w
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则