Я использовал ту же функцию, которую вы использовали dbo.split. Чтобы получить вывод (Агентство в одном столбце и код в другом), вы можете использовать подстроку вместе с индексом символа, который поможет вам разбить на два столбца.
Несколько изменений, которые я внес в ваш скрипт:
Изменена длина с 100 до 250, так как она усекала строку, и
убрал еще один крест, применяемый при создании дубликатов.
declare @testString varchar(250)
set @testString = 'Agency=100|Org=2112|RepOrg=2112|SubOrg=
|Fund=0137|Approp=6755|Object= |SubObject= |Activity= |Function= |Job= |ReportingCat='
select substring( (x.items),1,
case when CHARINDEX('=', x.items) = 0 then LEN(x.items)
else CHARINDEX('=', x.items) -1 end ) Agency ,
substring( (x.items),
case when CHARINDEX('=', x.items) = 0 then LEN(x.items)
else CHARINDEX('=', x.items) +1 end,len(x.items) -
case when CHARINDEX('=', x.items) = 0 then LEN(x.items)
else CHARINDEX('=', x.items)-1 end) as Code from dbo.split
(@testString, '|') x
Он работал без ошибок, и эта функция здесь, как упоминал Бен.
https://social.msdn.microsoft.com/Forums/en-US/bb2b2421-6587-4956-aff0-a7df9c91a84a/what-is-dbosplit?forum=transactsql
Вывод, который я получаю:
Agency Code
Agency 100
Org 2112
RepOrg 2112
SubOrg
Fund 0137
Approp 6755
Object
SubObject
Activity
Function
Job
ReportingCat