存储过程并不总是以相同的方式工作

时间:2015-10-06 12:02:47

标签: string stored-procedures 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

2 个答案:

答案 0 :(得分:0)

请尝试使用此拆分功能,看看是否有相同的问题。

Convert Delimited value to a List

编译后,只需尝试:

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

答案 1 :(得分:0)

通过向结果添加ORDER BY来解决此问题。没有结果的订单并不总是以相同的顺序返回。