С кодом, показанным ниже, я получаю тупик транзакции. Функция Split
берет строку и разбивает список на таблицы, которые я выбираю. У меня есть событие READ UNCOMMITTED
. Должен ли я поместить Split
во временную таблицу и затем выполнить запрос с ней?
ALTER PROCEDURE [Revisions]
@ScheduleRevisionIds NVARCHAR(MAX) = NULL
AS
BEGIN
SET NOCOUNT ON;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
IF(@ScheduleRevisionIds IS NOT NULL)
BEGIN
-- GET SCHEDULE REVISIONS
SELECT esr.Id
INTO #TempScheduleRevisions
FROM Revision esr
WHERE EXISTS (SELECT items
FROM dbo.Split(@ScheduleRevisionIds, ',')
WHERE esr.Id = items)
Функция
ALTER FUNCTION [Split](@String varchar(MAX), @Delimiter char(1))
returns @temptable TABLE (items varchar(MAX))
as
begin
declare @idx int
declare @slice varchar(MAX)
select @idx = 1
if len(@String)<1 or @String is null return
while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
if(len(@slice)>0)
insert into @temptable(Items) values(@slice)
SET @String = right(@String, LEN(@String) - @idx)
IF LEN(@String) = 0 BREAK
END
RETURN
END