J'écris un curseur pour remplir des données dans une nouvelle table à partir de la table principale qui contient des données ci-dessous p>
Je veux peupler de nouvelles données de table en récupérant l'élément, puis l'ajoutez-la en ligne, en fonction de chaque couleur contenant p>
Je suis coincé dans comment p>
Comme je vais utiliser un curseur imbriqué à cet effet. P>
4 Réponses :
Utilisation de SQL Server 2005+ et du type de données XML, vous pouvez consulter le suivant
DECLARE @Table TABLE( Item VARCHAR(250), Colors VARCHAR(250) ) INSERT INTO @Table SELECT 'Shirt','Red,Blue,Green,Yellow' INSERT INTO @Table SELECT 'Pants','Black,White' ;WITH Vals AS ( SELECT Item, CAST('<d>' + REPLACE(Colors, ',', '</d><d>') + '</d>' AS XML) XmlColumn FROM @Table ) SELECT Vals.Item, C.value('.','varchar(max)') ColumnValue FROM Vals CROSS APPLY Vals.XmlColumn.nodes('/d') AS T(C)
L'article Transact SQL Détails plusieurs techniques pour résoudre ce problème, allant de la fonction parsename () (limite à 5 éléments) pour écrire des fonctions CLR.
La réponse XML est l'une des techniques détaillées pouvant être choisies pour Un scénario spécifique. p>
combinant certains des conseils, j'ai résolu mon problème de scission de chaîne comme celui-ci: p> Notez que, en considérant 1 000 limite de longueur de chaîne , vous devez avoir une table avec 1000 lignes ou plus (DBO.Table sur l'échantillon TSQL) pour créer la variable de table @nums de cet échantillon. Sur l'article, ils ont une table d'énumération permanente. P> p>
Je viens d'accomplir quelque chose comme ceci pour créer des tables de stadification pour reproduire les tables source à l'aide des vues d'informations_schema sur un serveur lié. Mais ceci est une version modifiée pour créer les résultats que vous recherchez. N'oubliez pas de supprimer les deux derniers caractères de la colonne de couleurs lors de l'affichage.
SELECT t.Item , ( SELECT x.Color + ', ' AS [data()] FROM Items x WHERE x.Item = t.Item FOR XML PATH(''), TYPE ).value('.', 'varchar(max)') AS Colors FROM Items t GROUP BY t.Item
Pour ceux qui aiment le garder simple: