查询语言是这样的:SELECT iAutoID,cPici,cPici2,cTaskName,cTaskMemo,cOperation,dJDtime,cGroup_Name,dRealTime,cUserIDname,cTaskStateName,cParaDefID,cTaskID,iTaskNo,iXdTime,ijdtime FROM vProTask WHERE cGroupID IN (SELECT cGroup_id FROM v_UserInGroup WHERE cUserID='demo' ) AND cPlanID='SCJHD201001150001'
报的错误是:向 substring 函数传递了无效的 length 参数。
我的查询里并没有subString 函数啊?我查询,出错的行,是一个cGroupID=1的行,我想是不是我的SELECT cGroup_id FROM v_UserInGroup 结果集中有值11造成的呢,在没有cGroupID=1的查询中,是不报错的。
并且单独做条件:SELECT iAutoID,cPici,cPici2,cTaskName,cTaskMemo,cOperation,dJDtime,cGroup_Name,dRealTime,cUserIDname,cTaskStateName,cParaDefID,cTaskID,iTaskNo,iXdTime,ijdtime FROM vProTask WHERE cGroupID IN (SELECT cGroup_id FROM v_UserInGroup WHERE cUserID='demo' ) 不报错。
单独做:SELECT iAutoID,cPici,cPici2,cTaskName,cTaskMemo,cOperation,dJDtime,cGroup_Name,dRealTime,cUserIDname,cTaskStateName,cParaDefID,cTaskID,iTaskNo,iXdTime,ijdtime FROM vProTask WHERE cPlanID='SCJHD201001150001'
也不报错。高手们,帮帮忙想个解决方法吧。
报的错误是:向 substring 函数传递了无效的 length 参数。
我的查询里并没有subString 函数啊?我查询,出错的行,是一个cGroupID=1的行,我想是不是我的SELECT cGroup_id FROM v_UserInGroup 结果集中有值11造成的呢,在没有cGroupID=1的查询中,是不报错的。
并且单独做条件:SELECT iAutoID,cPici,cPici2,cTaskName,cTaskMemo,cOperation,dJDtime,cGroup_Name,dRealTime,cUserIDname,cTaskStateName,cParaDefID,cTaskID,iTaskNo,iXdTime,ijdtime FROM vProTask WHERE cGroupID IN (SELECT cGroup_id FROM v_UserInGroup WHERE cUserID='demo' ) 不报错。
单独做:SELECT iAutoID,cPici,cPici2,cTaskName,cTaskMemo,cOperation,dJDtime,cGroup_Name,dRealTime,cUserIDname,cTaskStateName,cParaDefID,cTaskID,iTaskNo,iXdTime,ijdtime FROM vProTask WHERE cPlanID='SCJHD201001150001'
也不报错。高手们,帮帮忙想个解决方法吧。
解决方案 »
- 乱码问题
- 各位老大,由于我的sql语句由用户的操作动态生成,可能会超过varchar(8000)的限制,有什么好的办法可以解决这种问题呢,难道只能定义几个varc
- 大家给看看偶的库设计有问题没.在线等着呢.
- 关于sql server2k对于excel的导入问题,谢谢大家了,我很着急:(
- 未能加载包 Microsoft SQL Management Studio Package
- 关于不同网段的服务器连接的问题
- 数据库引擎损坏是指什么???如何解决呢?在线等候!!谢谢
- 请问弱水,铁诺等drsys表空间是干什么的,能删除吗?
- 大大不妙,Access2000为何会耗掉内存?
- 大力 同步
- 安装问题
- 请教一sql语句
iAutoID,
cPici,
cPici2,
cTaskName,
cTaskMemo,
cOperation,
dJDtime,
cGroup_Name,
dRealTime,
cUserIDname,
cTaskStateName,
cParaDefID,
cTaskID,
iTaskNo,
iXdTime,
ijdtime
FROM vProTask V
WHERE EXISTS
(SELECT 1 FROM v_UserInGroup WHERE cGroupID=V.cGroup_id AND cUserID='demo' )
AND cPlanID='SCJHD201001150001'改成这样试试,应该是你其它语句造成的
SELECT iAutoID,cPici,cPici2,cTaskName,cTaskMemo,cOperation,dJDtime,cGroup_Name,dRealTime,cUserIDname,cTaskStateName,cParaDefID,cTaskID,iTaskNo,iXdTime,ijdtime
FROM vProTask v
join v_UserInGroup u on v.cGroupID=u.cGroup_id
and u.cUserID='demo'AND v.cPlanID='SCJHD201001150001'
我的查询里并没有subString 函数啊? 楼主仔细检查,应该不是这句报的错
是不是你其他的句子没有删除?
CREATE VIEW dbo.v_UserInGroup
AS
SELECT *
FROM (SELECT a.cUser_ID, SUBSTRING(a.cGroup_Id, b.ID, CHARINDEX(',',
a.cGroup_Id + ',', b.ID) - b.ID) AS cGroup_ID
FROM dbo.tb_User a INNER JOIN
dbo.sys_Num b ON CHARINDEX(',', ',' + a.cGroup_Id, b.ID) = b.ID)
DERIVEDTBL
WHERE (cGroup_ID <> '')GO
CHARINDEX(',',
a.cGroup_Id + ',', b.ID) - b.ID检查这个吧,
一个计划表视图 vProTask 里面有个字段是组编码内容是组id,数字的。如:1或2货3 单一的。
另一个表是员工表,员工表有个字段是 权限组,内容是 组id的集合,如:1,2,3,4 多个用逗号分隔。刚才的查询是 查询demo这个员工,在vProTask中有权限的记录。
a.cGroup_Id + ',', b.ID) - b.ID)
我决定肯定是这句引起的!
AS
SELECT *
FROM (SELECT a.cUser_ID, SUBSTRING(a.cGroup_Id, b.ID, CHARINDEX(',',
a.cGroup_Id + ',', b.ID) - b.ID) AS cGroup_ID
FROM dbo.tb_User a INNER JOIN
dbo.sys_Num b ON substring(','+a.cGroup_Id,b.ID,1)=',')
DERIVEDTBL
WHERE (cGroup_ID <> '')
改成这样
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。