簡體   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