Глупая ошибка в SQL Server Management Studio - PullRequest
1 голос
/ 11 августа 2009

У меня есть этот запрос, который порождает следующую ошибку:

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

Сообщение 536, Уровень 16, Состояние 5, Строка 1 Неверный параметр длины передан в функцию SUBSTRING.

Я что-то не так делаю? Это имеет тенденцию обнаруживаться, когда я использую функцию LEN (). Это может быть проблема с типом данных?

Ответы [ 5 ]

7 голосов
/ 11 августа 2009

Возможно ли, что LEN (QtLabel) <= 2? </p>

2 голосов
/ 11 августа 2009

Вы уверены, что каждое поле QtLabel длиннее 2 символов?

1 голос
/ 11 августа 2009
SELECT LEFT('MyText', -2)

выдаст ту же ошибку

1 голос
/ 11 августа 2009

Это связано с тем, что некоторые значения QtLabel не содержат> 2 символов, поэтому в итоге вы пытаетесь выполнить LEFT () с отрицательным значением в качестве числа, которое нужно ограничить.

В вашем сценарии вы предполагаете, что все значения QtLabel состоят из 6 символов, поэтому вы должны сделать:

SELECT * FROM Quota
WHERE LEN(QtLabel) = 6
AND LEFT(QtLabel, LEN(QtLabel)-2) IN (
'1032',
'3300',
'9682'
)
1 голос
/ 11 августа 2009

LEFT, вероятно, использует SUBSTRING для внутреннего использования. Что произойдет, если длина QtLabel <= 2? </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...