SQL:在where子句中使用预定义列表

时间:2014-01-31 17:24:45

标签: sql sql-server string groovy where

这是我想要做的一个例子:

        def famlist = selection.getUnique('Family_code')

   ... Where “””...
    and testedWaferPass.family_code in $famlist
    “””...

famlist是一个对象列表

'selection'将改变每次运行,因此列表总是在变化。

我想只返回我在SQL搜索中的列,其中的行在我创建的列表中找到。

我意识到它应该是这样的:in('foo','bar')

但无论我做什么,我的名单都不会那样。所以我必须把我的列表变成一个字符串?

('\${famlist.join("', '")}')

我尝试了以上,idk。不适合我。只是以为我会把它丢在那里。会喜欢一些建议。感谢。

1 个答案:

答案 0 :(得分:0)

我愿意打赌,有一种Groovier方法可以实现这个,而不是如下所示 - 但这是有效的。这是我的示例脚本的重要部分。 nameList原始包含字符串名称。需要引用列表中的每个条目,然后从toString结果中串起[和]。我尝试传递作为准备好的语句,但为此你需要动态创建字符串?对于列表中的每个元素。这个快速入侵不使用准备好的声明。

def nameList = ['Reports', 'Customer', 'Associates']
def nameListString = nameList.collect{"'${it}'"}.toString().substring(1)
nameListString = nameListString.substring(0, nameListString.length()-1)

String stmt = "select * from action_group_i18n where name in ( $nameListString)"
db.eachRow( stmt ) { row ->
    println  "$row.action_group_id, $row.language, $row.name"
} 

希望这有帮助!