如何在Excel查询中传入多单元格作为Sybase SQL查询参数?
问题解答:Excel多单元格ISIN值传入Sybase SQL的IN条件查询
这个需求完全可行,给你两种适合基础SQL知识的实现方法:
方法一:Excel拼接ISIN字符串(推荐,适合多值场景)
处理Excel单元格:
- 新增一列,用公式给每个ISIN加上单引号,比如在B2单元格输入
="'"&A2&"'",下拉填充所有10个ISIN所在行。 - 用TEXTJOIN函数合并成逗号分隔的字符串(Excel 2019及以后版本支持):在空白单元格输入
=TEXTJOIN(",",TRUE,B2:B11),得到类似'US1234567890','GB9876543210',...的结果。
- 新增一列,用公式给每个ISIN加上单引号,比如在B2单元格输入
修改SQL语句:
如果你的Sybase版本支持STRING_SPLIT函数,用下面的语句:SELECT e.ISINCode AS 'ISIN', e.Equities_ShortName AS 'ShortName', e.Equities_Name AS 'LongName' FROM Equities e WHERE e.ISINCode IN (SELECT value FROM STRING_SPLIT(?, ','))把合并后的字符串单元格关联到SQL的
?参数即可。如果Sybase版本不支持
STRING_SPLIT,可以用动态SQL(iSQL中可用):DECLARE @isin_list VARCHAR(1000) = ? EXEC('SELECT e.ISINCode AS ''ISIN'', e.Equities_ShortName AS ''ShortName'', e.Equities_Name AS ''LongName'' FROM Equities e WHERE e.ISINCode IN (' + @isin_list + ')')同样把合并后的字符串单元格关联到
?参数,这种方式要确保ISIN值没有特殊字符,避免SQL注入风险(你的场景是固定唯一值,没问题)。
方法二:使用多个参数(适合少量值,比如10个)
直接把IN条件改成对应数量的问号,然后逐个关联Excel单元格:
SELECT e.ISINCode AS 'ISIN', e.Equities_ShortName AS 'ShortName', e.Equities_Name AS 'LongName' FROM Equities e WHERE e.ISINCode IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
把Excel里的10个ISIN单元格依次关联到这10个?参数位置即可。
另外注意:你原来的SQL语句有两处错误,已经在上面的示例中修正——去掉了FROM Equities e后面的多余逗号,把AND改成了WHERE。
内容的提问来源于stack exchange,提问作者Vladimír Ondrášek
相关产品推荐
相关产品推荐

