You can add an SplitString function, like this one :
How to Split String by Character into Separate Columns in SQL Server
CREATE FUNCTION [dbo].[Split]
(
@String varchar(max)
,@Delimiter char
)
RETURNS @Results table
(
Ordinal int
,StringValue varchar(max)
)
as
begin
set @String = isnull(@String,'')
set @Delimiter = isnull(@Delimiter,'')
declare
@TempString varchar(max) = @String
,@Ordinal int = 0
,@CharIndex int = 0
set @CharIndex = charindex(@Delimiter, @TempString)
while @CharIndex != 0 begin
set @Ordinal += 1
insert @Results values
(
@Ordinal
,substring(@TempString, 0, @CharIndex)
)
set @TempString = substring(@TempString, @CharIndex + 1, len(@TempString) - @CharIndex)
set @CharIndex = charindex(@Delimiter, @TempString)
end
if @TempString != '' begin
set @Ordinal += 1
insert @Results values
(
@Ordinal
,@TempString
)
end
return
end
Now you can easily extract each part of your input parameter.
declare @I int;
declare @TMP nvarchar(255);
set @I = 1;
set @TMP = null;
set @TMP = (select StringValue from Split(@ForeignKeyCoumn, ',') where Ordinal = 1);
while @TMP <> null
begin
set @ForeignKeyColumn = (select StringValue from Split(@TMP, '^') where Ordinal = 1);
set @DataSchemaID = (select StringValue from Split(@TMP, '^') where Ordinal = 2);
-- Update here your table with @ForeignKeyColumn and @DataSchemaID values
set @I = @I + 1;
set @TMP = null;
set @TMP = (select StringValue from Split(@ForeignKeyCoumn, ',') where Ordinal = @I);
end
PS: If your are using SQL Server 2016 it already includes an SplitString function, so you won't need to add your own. https://learn.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql