根据产品序列号进行订单查询时,如何一次性查询出多个序列号的订单

卡卡西 2016-01-02 11:32:55
详细情况:例如我想查询出N个序列号的订单列表,SQL语句如何写?如果只有一个,那是很简单,直接写上条件相等就行了。可是有多个时,我想使用IN语句,但是序列号是整型数字串,我使用一个整形数组来装这些序列号的数字串,在SQL里面如何写语句?我写的是下面的这些,肯定不对,因为类型不匹配!!!
var
idlist:array of integer;//存放订单ID表
.....
begin
....
k:=adotmp.RecordCount ;
....
setlength(idlist,k);
select * from 订单表 where 序列号 in ['+ idlist:+'] order by 更新时间 desc

我应如何写这个SQL语句来实现查询N个序列号的订单表?
...全文
651 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Transitional 2016-01-30
  • 打赏
  • 举报
回复
表A Context Source aaa|bbb|ccc 1|2|3 给定“bbb” 查出“2” 或给“aaa”查出“1” 给ccc查出“3”
gw6328 2016-01-06
  • 打赏
  • 举报
回复
可以和一个没有的数据,全部用in 如 in (0'+@ids+') 这样 ids一个多个没有都可以。
道素 2016-01-06
  • 打赏
  • 举报
回复
你可以用charindex 前后加逗号是为了防止查123时把1234查出来

DECLARE @s VARCHAR(500) ='123,456,789'
;WITH a(id,OrderID) AS (
	SELECT 1, 123 UNION
	SELECT 2, 456 UNION
	SELECT 3, 235 UNION
	SELECT 4, 1234 
	)
SELECT *
 FROM a where CHARINDEX(','+convert(varchar,a.OrderID)+',',','+@s+',')>0
daile80 2016-01-06
  • 打赏
  • 举报
回复

var
  i:integer
  cond, sql: string;
begin
  for i := 0 to length( idlist) do
    cond := cond  + quotedstr(idlist[i]) + ',';
  cond := copy(cond,1,length(cond) - 1);

  sql := 'select * from xxxx where id in (' + cond + ')';
end;

daile80 2016-01-06
  • 打赏
  • 举报
回复
哦,上面for 循环要改成:Length(idlist) - 1
卖水果的net 2016-01-03
  • 打赏
  • 举报
回复
引用 2 楼 yuti 的回复:
我使用的是DELPHI,订单ID是整形数,查询语法中SQL语句的写法是我需要的
不懂 delphi , 你把我上述写的伪代码,改成 delphi 就可以了。
卡卡西 2016-01-03
  • 打赏
  • 举报
回复
我使用的是DELPHI,订单ID是整形数,查询语法中SQL语句的写法是我需要的
卖水果的net 2016-01-03
  • 打赏
  • 举报
回复
--执行一个   for 循环,把所有的值都拼接成一个字符串,

-- 大概伪代码如下
x_list = "";
for x in list 
begin
x_list += x.id + ",";
end 
x_list = substring(x_list,0,x_list.length -1);

sql = "select ..... where x in (" + x_list + ")";

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧