将文字列表绑定到SQL查询作为将返回1行的列?

时间:2012-05-22 19:44:10

标签: arrays tsql list

我有一个返回单行的SQL查询,我有一个数字列表,我需要将这些数字作为单个行返回,并将单行数据绑定到它们的行。

例如,这是我正在尝试做的事情

select a,b,c, barcode
from database
join ('12345', '67890',...) as barcode
where a=1 and b=2 and c=3

我需要这样做,因为我正在修改一些代码,这些代码正在寻找来自查询的特定格式,并且修改代码以匹配我的文字列表比做某事要困难得多像这样

    Example Output:

a     b     c     barcode
-     -     -     -------
1     2     3     12345
1     2     3     67890
1     2     3     ....
1     2     3     ....
...

2 个答案:

答案 0 :(得分:2)

最简单的方法是创建一个包含单个列的条形码表,一次插入一个所需的值,然后加入该表。

也可以使用联盟来捏造它。连接问题('484','48583',...)是你要连接到一个包含多列的行,当你想要每行一行时。

伪编码:

select a,b,c, barcode
from database
join (select 12345 union all select 289384 union all...)a as barcode
where a=1 and b=2 and c=3

答案 1 :(得分:0)

基本上,您可以将列表作为单个CSV字符串传递,并将其转换为一组项目。在这种情况下经常使用表值函数,但实际上有很多选项需要探索。在Erland Sommarskog撰写的一组文章中可以找到各种方法及其测试的非常全面的集合:Arrays and Lists in SQL Server

如果是一个函数,您的查询可能如下所示:

SELECT
  t.a,
  t.b,
  t.c,
  s.Value AS barcode
FROM yourtable t
CROSS JOIN dbo.Split('12345,67890', ',') s
WHERE t.a = 1
  AND t.b = 2
  AND t.c = 3