Convertir une string délimitée par des virgules en table ou tableau dans sql server 2008 sans utiliser dbo.split

Comment convertir une string délimitée par des virgules en table ou tableau dans sql server 2008 sans utiliser la fonction dbo.split car le système ne supporte pas cette fonction?

Par exemple: '12,14,15' Changez pour

 *Table column* 12 14 15 Or array=[12,14,15] 

Je voudrais finalement insert des valeurs de string séparées par des virgules dans une table. Merci

dbo.split est probablement une fonction définie par l'user, vous devez donc le définir. Sinon, vous pouvez utiliser XML + CROSS APPLY :

Démo

 DECLARE @ssortingng NVARCHAR(100) = '12,14,15' ;WITH cte AS ( SELECT CAST('<XMLRoot><RowData>' + REPLACE(t.val,',','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x FROM (SELECT @ssortingng) AS t(val) ) SELECT mnvalue('.[1]','varchar(8000)') FROM cte CROSS APPLY x.nodes('/XMLRoot/RowData')m(n) 

Si vous ne voulez pas utiliser split, vous pouvez créer votre propre fonction personnalisée pour y parvenir.

S'il vous plaît suivez la question de stack ci-dessous pour le même.

Comment convertir NVARCHAR séparés par des virgules en loggings de table dans SQL Server 2005?

Le lien ci-dessous couvre tous les moyens possibles pour y parvenir.

http://blogs.msdn.com/b/amitjet/archive/2009/12/11/sql-server-comma-separated-ssortingng-to-table.aspx

 ALTER FUNCTION [dbo].[fnSplitSsortingng] ( @ssortingng NVARCHAR(MAX), @delimiter CHAR(1) ) RETURNS @output TABLE(splitdata NVARCHAR(MAX) ) BEGIN DECLARE @start INT, @end INT SELECT @start = 1, @end = CHARINDEX(@delimiter, @ssortingng) WHILE @start < LEN(@ssortingng) + 1 BEGIN IF @end = 0 SET @end = LEN(@ssortingng) + 1 INSERT INTO @output (splitdata) VALUES(SUBSTRING(@ssortingng, @start, @end - @start)) SET @start = @end + 1 SET @end = CHARINDEX(@delimiter, @ssortingng, @start) END RETURN END