Я использую следующий UDF для обработки сплитов (через 4guysfromrolla )
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[Split]
(
@List nvarchar(2000),
@SplitOn nvarchar(5)
)
RETURNS @RtnValue table
(
Id int identity(1,1),
Value nvarchar(100)
)
AS
BEGIN
While (Charindex(@SplitOn,@List)>0)
Begin
Insert Into @RtnValue (value)
Select
Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
End
Insert Into @RtnValue (Value)
Select Value = ltrim(rtrim(@List))
Return
END
Ниже приведен пример использования UDF:
select [Value] from [dbo].Split('CA|NY|VA', '|')
Который вернет вам таблицу с 3 строками, по одной для каждого из состояний.
UPDATE:
Вот полный призыв сделать перевод первым:
declare @cslist varchar(2056)
select @cslist = coalesce(@cslist+',', '') + translated_states.full_state
FROM (
select T2.full_state from [dbo].Split('CA|NY|VA', '|') as T1
JOIN test as T2
on T2.abbr_state = T1.[Value]
) translated_states
select @cslist
Дайте мне знать, если у вас есть какие-либо вопросы о том, что нужно обновить, чтобы это работало с вашими таблицами, а не с моими тестовыми таблицами.