回答

收藏

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

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

我有一个类似于我使用的数据库StackOverflow基于存储过程的标记系统。WHERE为了找到结果,句子中未确定数量的标签。可能有0到10个标签之间的任何位置来过滤结果。因此,例如,用户可能正在搜索
/ M; V" E; f% e) oapple”,“ orange”和“ banana标签商品, 每个
! C# k' U/ S. e8 T- _6 l9 b% U+ p结果必须包含所有三个标签。我的查询变得更加复杂,因为我必须处理一个用于标记的交叉引用表,但为了这个问题,我不会重复。) y& c# ^7 Y1 W( S9 r- r* p' s- B
我知道我可以做一些字符串操作exec()函数提供查询来解决这个问题,但我宁愿不解决和动态SQL相关性能问题。我认为最好是SQL为存储的proc缓存查询计划。
( i3 T' h+ }& x0 @; u在这种情况下,你使用了哪些技术来避免动态SQL?
+ N- i: n( X/ d. p- ~根据公众的需求,这是我正在使用的查询:
  [0 ]6 G1 q" F# W! N: T4 S" G6 V8 ESELECT 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’标签。, u  C7 b" D: l" Q( e2 ]7 b
                                                                - }. V+ S1 t& k6 @
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则