我们有一个特定的存储过程,它会分割收到的一个参数,并根据拆分数据执行一些插入。
程序工作正常但随机崩溃。我们对传递的参数进行了审计,并对程序运行时已拆分的值进行了审计。出于某种原因,似乎拆分在开头添加了一个额外的项目,或者有时混合拆分数据的顺序,这在我们的情况下很重要,因为被拆分的数据被格式化为类似这样的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 :(得分:0)
请尝试使用此拆分功能,看看是否有相同的问题。
Convert Delimited value to a List
编译后,只需尝试:
select * from dbo.fnArray('Does#This#Thing#Really#Work', '#')
答案 1 :(得分:0)
通过向结果添加ORDER BY来解决此问题。没有结果的订单并不总是以相同的顺序返回。