Vielleicht so etwas wie dies eine verallgemeinerte Code zu machen.
Declare @String varchar(max) = 'MEM - CP NEW INSTALL - 000 - 519.83 - MEMPHIS - SHELBY - TN'
Select * from [dbo].[udf-Str-Parse-Row](@String,' - ')
Returns
Pos1 Pos2 Pos3 Pos4 Pos5 Pos6 Pos7 Pos8 Pos9
MEM CP NEW INSTALL 000 519.83 MEMPHIS SHELBY TN NULL NULL
Die UDF - Einfach genug, um Ihre Bedürfnisse anzupassen/size
CREATE FUNCTION [dbo].[udf-Str-Parse-Row] (@String varchar(max),@Delimeter varchar(10))
--Usage: Select * from [dbo].[udf-Str-Parse-Row]('Dog,Cat,House,Car',',')
-- Select * from [dbo].[udf-Str-Parse-Row]('John Cappelletti',' ')
-- Select * from [dbo].[udf-Str-Parse-Row]('id26,id46|id658,id967','|')
Returns Table
As
Return (
SELECT Pos1 = xDim.value('/x[1]','varchar(250)')
,Pos2 = xDim.value('/x[2]','varchar(250)')
,Pos3 = xDim.value('/x[3]','varchar(250)')
,Pos4 = xDim.value('/x[4]','varchar(250)')
,Pos5 = xDim.value('/x[5]','varchar(250)')
,Pos6 = xDim.value('/x[6]','varchar(250)')
,Pos7 = xDim.value('/x[7]','varchar(250)')
,Pos8 = xDim.value('/x[8]','varchar(250)')
,Pos9 = xDim.value('/x[9]','varchar(250)')
FROM (Select Cast('<x>' + Replace(@String,@Delimeter,'</x><x>')+'</x>' as XML) as xDim) A
)
Eine weitere Option ist der Standard (mit Reihe nr) Parsen und dann können Sie schwenken nach Bedarf
Select * from [dbo].[udf-Str-Parse](@String,' - ')
Returns
Key_PS Key_Value
1 MEM
2 CP NEW INSTALL
3 000
4 519.83
5 MEMPHIS
6 SHELBY
7 TN
Die zweite UDF
CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimeter varchar(10))
--Usage: Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',')
-- Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ')
Returns @ReturnTable Table (Key_PS int IDENTITY(1,1), Key_Value varchar(max))
As
Begin
Declare @XML xml;Set @XML = Cast('<x>' + Replace(@String,@Delimeter,'</x><x>')+'</x>' as XML)
Insert Into @ReturnTable Select Key_Value = ltrim(rtrim(String.value('.', 'varchar(max)'))) FROM @XML.nodes('x') as T(String)
Return
End
Sie benötigen diese Splitter mit einem String zu tun. Hier sind einige ausgezeichnete Optionen hier. http://sqlperformance.com/2012/07/t-sql-queries/split-strings Dann, wenn überhaupt möglich, sollten Sie aufhören, mehrere Werte in einer einzelnen Zelle wie folgt zu speichern, es verletzt 1NF. –
Mögliches Duplikat von [Wie werden einzelne Spaltenwerte in mehrere Spaltenwerte aufgeteilt?] (Http://stackoverflow.com/questions/5123585/how-to-split-a-single-column-values-to-multiple-column -Werte) & [Wie man einen durch Komma getrennten Wert in Spalten aufteilt] (http://stackoverflow.com/q/10581772/876298) –
Ich habe diese Alex ausprobiert und habe den ersten Teil zur Arbeit gebracht, aber die anderen Teile haben gewonnen ' t zeigen. so dass Code für meinen Fall nicht funktioniert – carp47