Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 И снова Invalid length parameter passed to the substring function  [new]
ilya_er
Member

Откуда: Москва
Сообщений: 206
Подскажите, пожалуйста...
Есть вот такой фрагмент процедуры :

DECLARE
	@credit_currency_code nvarchar(50),
	@int int,
	@ch_end int,
	@work_string varchar(200),
	@update_string nvarchar(4000),
	@update_row nvarchar(200),
	@work_char varchar(1),
	@terminal varchar(255)
--.......... пропущена часть кода
select @int=1
select @update_string = 'update #card_open_char set '

set @ch_end=186
if len(@work_string)<186
  set @ch_end=len(@work_string)
print @work_string
while @int<=@ch_end
begin
	print 'row0'
        set @update_row=''
        print 'row1'
        select @work_char = substring(@work_string,@int,1)
        print 'row2'
	if @int >1
   	  select @update_row = ', '
	select @update_row = @update_row + 'CH' + convert(varchar,@int) + ' = ''' + @work_char +''''
        print 'row3'
        print '@int='+convert(varchar,@int)+'@work_char='''+@work_char+''''
	set @update_string=@update_string+@update_row
        print 'row4'
	select @int = @int+1
		--else select @update_string = @update_string + ''''
end
select @update_string = @update_string + ' where id_obj = ' + CAST(@object_id AS varchar(10))
--select @update_string 
exec (@update_string)

Принты оставлены для удобства изложения проблемы
Ошибка Invalid length parameter passed to the substring function возникает
внутри цикла, причем на одних и тех же данных - на разных итерациях цикла и иногда после 'print row1', а иногда - после 'print row3'.
Уборка длины varchar из оператора convert проблемы не решила.
10 ноя 05, 15:02    [2056182]     Ответить | Цитировать Сообщить модератору
 Re: И снова Invalid length parameter passed to the substring function  [new]
Glory
Member

Откуда:
Сообщений: 104760
declare @x varchar(10)
set @x = 'fffff'
select substring(@x,1,-1)
10 ноя 05, 15:06    [2056212]     Ответить | Цитировать Сообщить модератору
 Re: И снова Invalid length parameter passed to the substring function  [new]
ilya_er
Member

Откуда: Москва
Сообщений: 206
Glory
declare @x varchar(10)
set @x = 'fffff'
select substring(@x,1,-1)


У меня же длина жестко стоит 1 ... +1, а не -1
10 ноя 05, 15:13    [2056269]     Ответить | Цитировать Сообщить модератору
 Re: И снова Invalid length parameter passed to the substring function  [new]
Glory
Member

Откуда:
Сообщений: 104760
Это пример возникновения такой ошибки.
В сообщении явно указано что проблема в "length parameter " функции substring
10 ноя 05, 15:16    [2056308]     Ответить | Цитировать Сообщить модератору
 Re: И снова Invalid length parameter passed to the substring function  [new]
ilya_er
Member

Откуда: Москва
Сообщений: 206
Но ведь length parameter равен 1, а максимальный индекс начала подстроки - длина строки, это проверяется...
Если бы ошибка возникала на любом варианте данных, или все время на одном и том же символе, я бы сам ее нашел и не стал бы топик создавать.
10 ноя 05, 15:43    [2056460]     Ответить | Цитировать Сообщить модератору
 Re: И снова Invalid length parameter passed to the substring function  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilya_er
Но ведь length parameter равен 1, а максимальный индекс начала подстроки - длина строки, это проверяется...
Если бы ошибка возникала на любом варианте данных, или все время на одном и том же символе, я бы сам ее нашел и не стал бы топик создавать.


1. Если ошибка генерируется, то значит она есть.Только возможно не там, куда вы смотрите.

2. Обычно сообщение об ошибке содержит инофрмацию о строке бэтча, вызвавщего ошибку.
10 ноя 05, 15:47    [2056478]     Ответить | Цитировать Сообщить модератору
 Re: И снова Invalid length parameter passed to the substring function  [new]
ilya_er
Member

Откуда: Москва
Сообщений: 206
Glory

1. Если ошибка генерируется, то значит она есть.Только возможно не там, куда вы смотрите.

2. Обычно сообщение об ошибке содержит инофрмацию о строке бэтча, вызвавщего ошибку.


Так и оказалось ) Но все же, неужели порядок вывода сообщений и ход выполнения процедуры - это в MSSQL не связанные вещи ?
10 ноя 05, 16:16    [2056660]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить