2009-08-11 38 views
1

我有這個疑問的滋生以下錯誤:廢話錯誤

SELECT * FROM Quota 
WHERE LEFT(QtLabel, LEN(QtLabel)-2) IN (
'1032', 
'3300', 
'9682' 
) 

Msg 536, Level 16, State 5, Line 1 Invalid length parameter passed to the SUBSTRING function.

難道我做錯了什麼?當我使用LEN()函數時,它傾向於顯示。可能是數據類型的問題?

回答

7

LEN(QtLabel)< = 2可能嗎?

+0

我的測試代碼顯示,它是excatly這個。 _declare @quota表(qtlabel varchar(10));插入@quota值('1'); SELECT * FROM @Quota WHERE LEFT(QtLabel,LEN(QtLabel)-2)IN('1032','3300','9682')_ – 2009-08-11 15:26:28

+1

AH當然。我很習慣過濾一些記錄,但這次我忘了這麼做。傻我。 – 2009-08-11 15:27:04

2

你確定每個QtLabel字段長於2個字符嗎?

1

LEFT可能在內部使用SUBSTRING。如果QtLabel的長度爲< = 2,會發生什麼情況?

1

這是因爲一些QtLabel值不包含> 2個字符,所以你最終嘗試做一個帶有負值的LEFT()作爲限制的數字。

在您的情況,您是假設所有QtLabel值是6個字符,所以uou應該做的:

SELECT * FROM Quota 
WHERE LEN(QtLabel) = 6 
AND LEFT(QtLabel, LEN(QtLabel)-2) IN (
'1032', 
'3300', 
'9682' 
) 
1
SELECT LEFT('MyText', -2) 

將拋出同樣的錯誤