Я встраиваю отчет в SSRS, где пользователь вручную добавляет некоторые данные к 4 текстовым параметрам, которые отправляются в хранимую процедуру, которая должна использовать их для создания временной таблицы.
I 'В настоящее время я тестирую сценарий sql перед созданием хранимой процедуры, но я не могу понять, как поместить все данные во временную таблицу, поскольку каждое значение хранится в отдельной переменной
, которую я создалфункция для анализа значений в каждой переменной и использования их в качестве таблицы, затем я делаю оператор вставки для каждой переменной в одну и ту же временную таблицу, но данные не добавляются в одну строку, например, строка 1 ввременная таблица должна быть 80605166, 190411-001751, Email1, CC1, но не
Declare
@TID varchar(max) = '80605166,80414297,80410854'
,@Incident varchar(max) = '190411-001751,190411-001829,190228-000928'
,@Email varchar(max) = 'Email1,Email2,Email3'
,@CC varchar(max) = 'CC1,CC2,CC3'
--Create temp table to storage user input data into paramaters
IF OBJECT_ID ('tempdb..#Paramaters') IS NOT NULL DROP TABLE #Paramaters
CREATE TABLE #Paramaters ( TID INT null , [Incident Number] nvarchar(14)null , Email varchar(500) null , CC varchar(500)null)
INSERT #Paramaters (TID)
select value from RPT.TVF_TextToTable (@TID,',')
INSERT #Paramaters ([Incident Number])
select value from RPT.TVF_TextToTable (@Incident,',')
INSERT #Paramaters (Email)
select value from RPT.TVF_TextToTable (@Email,',')
INSERT #Paramaters (CC)
select value from RPT.TVF_TextToTable (@CC,',')
Select * from #Paramaters
Текущий вывод (это то, что я получаю, но это неправильно)
Ожидаемый результат
Первый TID относится к первому инциденту, первому электронному письму и первому CC
Ниже приведен код дляфункция TVF:
ALTER function [RPT].[TVF_TextToTable]
(
@Text varchar(max),
@Delimiter char(1) = ','
)
RETURNS @table TABLE (Value varchar(256))
AS
BEGIN
declare @Length integer
declare @Begin integer
declare @End integer
set @Length = datalength(@Text)
set @Begin = 1
set @End = patindex('%' + @Delimiter + '%', @Text)
while @End <> 0
begin
insert into @table
select substring(@Text, @Begin, @End - 1)
set @Begin = @Begin + @End
set @End = patindex('%' + @Delimiter + '%', substring(@Text, @Begin, @Length - @Begin + 1))
end
-- Now Catch any End Piece when it doesn't end with a comma
if (@Length >= @Begin)
begin
insert into @table
select substring(@Text, @Begin, @Length - @Begin + 1)
end
RETURN
end