séparer les valeurs séparées par des virgules et les stocker dans la table dans sql server
Je vais avoir une procédure stockée qui obtient les valeurs séparées par des virgules comme une entrée. J'ai besoin de le séparer et les besoins de la stocker dans un tableau de lignes individuelles.
Laisser l'entrée de la SP est :
Rule_ID ListType_ID Values
1 2 319,400,521,8465,2013
J'ai besoin de le stocker dans une table appelée DistributionRule_x_ListType
dans le format ci-dessous:
Rule_ID ListType_ID Value
1 2 319
1 2 400
1 2 521
1 2 8465
1 2 2013
Mon SP ressemble comme ci-dessous:
ALTER PROCEDURE [dbo].[spInsertDistributionRuleListType]
(@Rule_ID int,
@ListType_ID int,
@Values VARCHAR(MAX)=NULL
)
AS
BEGIN
INSERT INTO DistributionRule_x_ListType (Rule_ID,ListType_ID,Value)
VALUES (@Rule_ID,@ListType_ID,@Values)
END
Vous devez vous connecter pour publier un commentaire.
Vous aurez besoin de créer une fonction de répartition similaire à ceci:
Puis dans la procédure stockée, vous devez appeler la fonction pour séparer votre chaîne:
Lorsque vous exécutez la procédure stockée, il se divise, les valeurs et insérez-la de plusieurs lignes dans votre tableau:
Voir SQL jouer avec la Démo. Cela permettra d'insérer le résultat suivant:
IF
instruction pour utiliser deuxINSERT
déclaration, qui utilise la fente et l'autre n'en a pas -- voir cette démo -- sqlfiddle.com/#!3/4179d/1vous pouvez le faire avec charindex comme
Vous pouvez le faire sans
dbo.Split
fonction.Ici est votre échantillon de données
Maintenant, exécutez la requête suivante et sélectionner toutes les valeurs séparées par des virgules pour chaque
Rule_ID
etListType_ID
.Vous pouvez créer une fonction qui retourne un tableau var pour diviser la chaîne. Nous avons utilisé avec succès sur MSSQL2005.
Remplir @bluefeet réponse, vous pouvez également utiliser le CSV chaîne pour stocker plusieurs valeurs de plusieurs colonnes:
Diviser le fichier csv en lignes:
Diviser les lignes en colonnes: