关于SQL Server2005数据库子查询问题

我在SQL2008版本上写了一个语句可以运行,后来到SQL2005版本上运行不了,我知道是因为2005版本的SQL数据库不允许使用子查询。想简单的我会改,我这个有点复杂,我实在不知道该怎么改,请大神赐教。我的语句:insert into JSKLIB(LIB001,LIB002,LIB003,LIB004,LIB005,LIB006,LIB007,LIB008,LIB011,LIB019,LIB020,LIB021,LIB022,LIB023,LIB024,LIB901,LIB903,LIB905)
VALUES((select MAX(LIA001) FROM JSKLIA WHERE LIA001 LIKE CONVERT(CHAR(8),GETDATE(),112)+'%'),(select ISNULL(case when len(MAX(LIB002)+1)=1 then '00'+(cast(MAX(LIB002)+1 as CHAR(3))) when len(MAX(LIB002)+1)=2 then '0'+(cast(MAX(LIB002)+1 as CHAR(3))) else cast(MAX(LIB002)+1 as CHAR(3)) end,'001') from JSKLIB WHERE LIB001 =(SELECT MAX(LIA001) FROM JSKLIA WHERE LIA001 LIKE CONVERT(CHAR(8),GETDATE(),112)+'%')),
(select DEA001 FROM TPADEA WHERE DEA002='名字' AND DEA057='规格"),'名字',(select DEA003 FROM TPADEA WHERE DEA002='名字' AND DEA057='规格'),'03','-1','300','T','********************','1','1',(select DEA003 FROM TPADEA WHERE DEA002='名字' AND DEA057='规格'),'规格','名字','DS','DS','2')

以上就是我的语句了,我百度搜索过其他的解决方法,有人问了一个语句是:insert into 门诊检验申请(门诊号,姓名,性别,年龄,科别,申请日期,床号,项目名称,申请人,项目编码,项目组,标本类型,处理标志)
values('1111','11','男','20','122','02-11-20','02','122','张三','122',(select 项目组 from 检验项目 where 项目编码='122'),
(select 标本类型 from 检验项目 where 项目编码='122'),'12'),解决办法是改成:insert into 门诊检验申请(门诊号,姓名,性别,年龄,科别,申请日期,床号,项目名称,申请人,项目编码,项目组,标本类型,处理标志)
select '1111','11','男','20','122','02-11-20','02','122','张三','122', 项目组 ,
标本类型 ,'12' from 检验项目 where 项目编码='122',
这个我看懂了,但是它原先的子查询里只涉及到一张表、一个条件,我那个涉及的表跟条件都比较多,我就不知道怎么下手了,请各位大神指导一下

第1个回答  2017-06-12
因为2005版本的SQL数据库不允许使用子查询---请出示官方文档追问

嗯,我知道2005版本的SQL数据库不允许使用子查询,我这边的意思是怎么改,改成SQL2005版本可以运行的语句,简单的我会改,但是我这个涉及到的表跟条件都比较多,我就改不来了

追答

谁说2005版本的SQL数据库不允许使用子查询

追问

我在SQL2005版本的数据库里运行我那条语句时报出我图片上显示的错,反正我的意思是能解决我那个问题就好,只要能解决我那个问题,SQL2005允许不允许使用子查询我无所谓。

追答

建议改成多条语句 用存储过程
那么长的sql你看着不头晕么

本回答被网友采纳
相似回答