SQL 语句过长如何处理

lrh_079 2009-05-21 09:01:06
现有一SQL语句:
select columnA from table where columnB in ('2009-05-01 00:00:00', '2009-05-01 01:00:00',......)
其中括号中的字符串是程序自动生成的,有时会出现超过65,536,SQL语句就不能执行。
除了语句拆分,是否有其它解决方法?
...全文
508 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lrh_079 2009-06-23
  • 打赏
  • 举报
回复
分数不多,见谅见谅
tengjian1981 2009-05-21
  • 打赏
  • 举报
回复
如果可以的话,建议将columnB改成其他字段,例如用ID字段,那样长度会缩短很多,效率也会提高
kele1006 2009-05-21
  • 打赏
  • 举报
回复
用临时表是不错的选择

以前刚会写程序的时候也遇到过这个问题,那会的处理是让SQL不超长,需要处理的逻辑可能跟LZ不太相似
由于SQL SERVER的SQL语句在执行的时候有脚本长度的限制,所以我是in()里面的条目超过1K条,自动截断1K以上的条目,生成第二条SQL语句执行!~

mlliqiushi 2009-05-21
  • 打赏
  • 举报
回复
二次查询,也就是查询一下后,拿第一个的记录当做一个表继续查

我也不太懂,我要是像你需要那么查的话,二楼的方法是不错的
百年树人 2009-05-21
  • 打赏
  • 举报
回复

select columnA from table where columnB 
in (select qdate from
(
select '2009-05-01 00:00:00' as qdate
union all select '2009-05-01 01:00:00'
union all select ......
) t
)
hery2002 2009-05-21
  • 打赏
  • 举报
回复
不知道数据是什么样子的,
是否可以使用between .. and?
临时表+JOIN是一种不错的选择.
haitao 2009-05-21
  • 打赏
  • 举报
回复
in有64k限制,sql应该没有
in ('2009-05-01 00:00:00', '2009-05-01 01:00:00',......)
改为
join (select '2009-05-01 00:00:00' f1
union select '2009-05-01 01:00:00'
union ......
) d on d.f1=...
haitao 2009-05-21
  • 打赏
  • 举报
回复
'2009-05-01 00:00:00' 可以不用时分秒信息的
即'2009-05-01'也等效
shenzhenNBA 2009-05-21
  • 打赏
  • 举报
回复
select columnA from table where columnB in (select [日期字段] from 表)
JonasFeng 2009-05-21
  • 打赏
  • 举报
回复
楼主这样处理肯定有问题的。

就算字符够长,效率也很低。

可以采用讲所有的日期都放在临时表里。查询时候两表匹配。

还可以。反过来查,不满足条件的。这样内容可能会少点。
--小F-- 2009-05-21
  • 打赏
  • 举报
回复
用临时表,join
csdyyr 2009-05-21
  • 打赏
  • 举报
回复
可以放到一个临时表,然后join。
水族杰纶 2009-05-21
  • 打赏
  • 举报
回复
將in裡面的日期
放到一個表裡
然後join

34,872

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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