2015-10-06 2 views
0

У нас есть специальная хранимая процедура, которая разбивает один из полученных параметров и выполняет некоторые вставки на основе разделенных данных.Сохраненная процедура не всегда работает одинаково

Процедура работает нормально, но случайным образом она падает. У нас есть аудит передаваемых параметров, а также аудит значений, которые были разделены при выполнении этой процедуры. По какой-то причине кажется, что разделение добавило дополнительный элемент в начале или иногда смешивает порядок данных Split, что имеет большое значение в нашем случае, поскольку разделяемые данные отформатированы примерно так, как этот UserId # LocationId # Note # RecordId * Date

Странно, что если мы возьмем параметры из аудита и запустим процедуру, которая не удалась, она работает нормально !!! Это сбой один раз в 5000 раз, когда он запускается. Функция SplitString приведена ниже.

ALTER FUNCTION [dbo].[SplitString] 
( 
    @string NVARCHAR(MAX), 
    @delimiter CHAR(1) 
) 
RETURNS @output TABLE(splitdata NVARCHAR(MAX)) 
BEGIN 
    DECLARE @start INT, @end INT 
    SELECT @start = 1, @end = CHARINDEX(@delimiter, @string) 
    WHILE @start < LEN(@string) + 1 
    BEGIN 
     IF @end = 0  
      SET @end = LEN(@string) + 1 

     INSERT INTO @output (splitdata)  
     VALUES(SUBSTRING(@string, @start, @end - @start)) 
     SET @start = @end + 1 
     SET @end = CHARINDEX(@delimiter, @string, @start) 

    END 
RETURN 
END 

ответ

0

Проблема была установлена ​​путем добавления ORDER BY к результату. Без заказа по результату не всегда возвращаются в том же порядке.

0

Попробуйте использовать эту функцию разделения и посмотрите, есть ли у вас такие же проблемы.

Convert Delimited value to a List

После компиляции это просто попробовать:

select * from dbo.fnArray('Does#This#Thing#Really#Work', '#') 
+0

Спасибо за ваш ответ @ewahner. К сожалению, мы не можем просто попробовать, потому что это происходит на живых серверах, и это не то, что мы можем легко воспроизвести, поскольку это происходит раз в миллион. Наиболее тревожно то, что если мы перезапустим sp с теми же параметрами, он отлично работает. –

Смежные вопросы