Недавно мы наблюдали очень странную проблему с блоком сеанса SQL Server, была скалярная функция для процесса разделения строк, которая использовалась в блоке кода цикла внутри хранимой процедуры, мы проверили код, никаких операций не былов таблицах базы данных, почему другие сеансы были заблокированы сеансом, который вызывает функцию?
вот определения функций:
CREATE function [dbo].[splits](@SourceSql varchar(max), @StrSeprate varchar(10), @y int)
returns varchar(max) as
begin
declare @i int
declare @idx int
declare @s varchar(max)
if(right(@SourceSql,1)!=@StrSeprate)begin
set @SourceSql=@SourceSql+@StrSeprate
end
set @idx=0
set @i=charindex(@StrSeprate,@SourceSql)
while @i>=1
begin
set @s=left(@SourceSql,@i-1)
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)
set @idx=@idx+1
if (@idx=@y) begin
break
end
set @s=null
end
return @s
end