7
votes

Comment scinder la chaîne et enregistrer dans un tableau dans T-SQL

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

article couleurs chemise rouge, bleu, vert, jaune

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

article couleur chemise rouge chemise bleu chemise vert chemise jaune

Je suis coincé dans comment

  1. Delimit / Split "Couleurs" String
  2. pour l'enregistrer dans un tableau
  3. Pour l'utiliser dans le curseur

    Comme je vais utiliser un curseur imbriqué à cet effet.


0 commentaires

4 Réponses :


6
votes

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)


0 commentaires

3
votes

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.

combinant certains des conseils, j'ai résolu mon problème de scission de chaîne comme celui-ci: xxx

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.


0 commentaires

0
votes

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


0 commentaires

1
votes

Pour ceux qui aiment le garder simple: xxx


0 commentaires