【发布时间】:2013-02-07 07:19:24
【问题描述】:
我需要一种在 Sybase 中执行以下模式的方法:
SELECT * FROM tbl WHERE x IN (@list)
选择将是存储过程的一部分,它从 Web 表单传递值。我想允许用户为每个字段输入 0 到多个搜索键,其中输入的多个值由某个分隔符分隔。目前我可以处理 0 到 1 个键,但不能处理 >1。
我一直在尝试为这个类似于上面的伪 SQL 找到一个优雅的解决方案,虽然我发现其他数据库似乎有内置的方式来支持(例如数组),但它似乎不存在是 Sybase 的简单答案。
任何帮助将不胜感激。如果更多详细信息有帮助,请告诉我。
【问题讨论】:
-
优雅的解决方案是采用数组或 CTE 的数据库。没有他们,这将有高跷醉大象的优雅。您可以将逗号分隔的值作为参数传递,然后将其拆分到临时表中并使用 join 而不是 in。
-
不幸的是,我受困于我们现有的技术堆栈。我认为将字符串切分到临时表中可能是最可靠的方法,尽管那样会很糟糕。
-
至少隐藏了前端代码中的乱七八糟,万一出错了还可以怪DBA。 :)
标签: sql stored-procedures parameters sybase optional-parameters