Один из способов решить эту проблему использует рекурсивный КТР. Это, вероятно, не самый быстрый способ, но это самый простой способ я нашел в этой конкретной ситуации:
DECLARE @Source varchar(200) = 'emp_id="123",emp_status="New Hire",emp_name="Smith, John A",emp_salary="2000",emp_state="VA"'
;WITH CTE AS
(
SELECT LEFT(@Source, CHARINDEX('",', @Source)) as val,
RIGHT(@Source, LEN(@Source) - CHARINDEX('",', @Source)-1) as string
UNION ALL
SELECT CASE WHEN CHARINDEX('",', string) > 0 THEN
LEFT(String, CHARINDEX('",', string))
ELSE
String
END as val,
CASE WHEN CHARINDEX('",', string) > 0 THEN
RIGHT(string, LEN(string) - CHARINDEX('",', string)-1)
ELSE
''
END as string
FROM CTE
WHERE LEN(string) > 0
)
SELECT LEFT(val, CHARINDEX('=', val)-1) As [Column Name],
REPLACE(RIGHT(val, LEN(val) - CHARINDEX('=', val) -1), '"', '') As Value
FROM CTE
Результаты:
Column Name Value
emp_id 123
emp_status New Hire
emp_name Smith, John A
emp_salary 2000
emp_state VA
Возможный дубликат [Превращение Comma разлуки строки в отдельные строки] (http://stackoverflow.com/questions/5493510/turning-a-comma-separated-string-into-individual-rows) – Prisoner
Плюс, в этом вопросе нет реальной попытки решения. Если вы не собираетесь выступать, ничего не ожидайте. –
Лучше всего использовать * not * использовать значения, разделенные somma, использовать таблицу «многие-ко-многим» или TVP. SQL Server 2016 добавил команду [STRING_SPLIT] (https://msdn.microsoft.com/en-us/library/mt684588.aspx) как удобство, которое нельзя злоупотреблять. –