繁体   English   中英

此查询有什么问题,如何使它更有效?

[英]What is wrong with this query, and how can I make it more efficient?

我有一个包含string data typeProjectNum column 通常这些数字是X1234...但是如果没有分配任何数字,则必须自动生成一个数字,并且根据分配给项目的优先级,取决于它是以C or F开头。 因此,自动生成的数字必须以C or F开头,后跟六位数字,并且还要自动递增。 所以这是我的查询...

SELECT MAX(CINT(RIGHT(ProjectNum, 6))) AS LastDigits
FROM project_master_query
WHERE ((ProjectNum LIKE (IIF([@priorityDefID] = 4, "C*", "F*"))));

这使我可以获取最后一个自动递增的数字,然后可以通过添加1自动生成代码中的数字。问题是,当我发送@priorityDefID of 4 (目前数据库中没有以。开头的数字) “ C”),我收到错误消息"This expression is typed incorrectly, or it is too complex to be evaluated.例如,一个数字表达式可能包含太多复杂的元素。请尝试通过将表达式的某些部分分配给变量来简化该表达式“。

不太确定为什么我会通过4,但是1、2或3可以正常工作并返回正确的值。 我在考虑,而不是编写MAX ,只是抓住所有以C或F开头的字符,然后抓住正确的6位数字,即降序并抓住前1位?

该查询有很多问题,我不清楚发生了什么,所以我不知道从哪里开始。 但是,我可以警告您使用带有6位数字的CInt()的危险。 CInt("999999")抛出溢出错误,因为最大整数值为32,767。 使用CLng会更安全,因为最大长整数值为2,147,483,647 ...,因此长整数将容纳所有可能的6位数字值。

尽管该问题可能不是使用当前ProjectNum值引起麻烦的根源,但随着您存储更多ProjectNum值,将来可能会困扰您。

关于“ [错误消息]随我通过4而出现,但是1、2或3可以正常工作并返回正确的值” ,您还说过“目前数据库中没有以'C'开头的内容” 这意味着在这种情况下查询不返回任何行。 我怀疑这会导致RIGHT(ProjectNum, 6)出现问题,因为Right(Null, 6)会触发对Null错误的无效使用

添加以“ C”开头的ProjectNum的行后,检查错误是否消失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM