[英]What is wrong with this query, and how can I make it more efficient?
我有一個包含string data type
的ProjectNum 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.