2016-12-07 2 views
0

J'ai deux chaînes avec un délimiteur de virgule comme Username = "Adam Hughes, Petro Camp" et Email Addresses = "[email protected],[email protected]".Chaîne d'insertion sperated insérée dans plusieurs lignes dans SQL

Je veux insérer dans 1 table l'historique du journal où il a Username ,Email Address, SourceId,DateStamp comme colonnes dans le tableau.

Je souhaite insérer dans la table une ligne: Adam Huges [email protected] 0 '2016-12-06' et la ligne suivante: Petro Camp [email protected] 0 '2016-12-06'.

Comment réaliser ceci? Est-ce que cela peut être fait en C# et poussé vers la base de données SQl?

+0

Pouvez-vous s'il vous plaît dire quelle base de données et quelle langue. Si vous souhaitez faire cela sur le code côté ou le script SQL? – Swetha

Répondre

0
DECLARE @USERNAME VARCHAR(MAX) = 'test1,test2'; 
DECLARE @EMAILID VARCHAR(MAX) = 'test6,testr3' ; 
DECLARE @lenuser INT; 
DECLARE @lenemailid INT; 
DECLARE @startIndex INT = 0; 
declare @indexemail INT = 0; 
DECLARE @endIndex INT; 
DECLARE @startEmailIndex INT = 0; 
DECLARE @endEmailIndex INT; 

WHILE @startIndex <= LEN(@USERNAME) AND @startEmailIndex <= LEN(@EMAILID) 
    BEGIN 
    SELECT @endIndex = charindex(',',@USERNAME,@startIndex); 
    SELECT @endEmailIndex = charindex(',',@EMAILID,@startEmailIndex); 
    if @endIndex = 0 
    begin 
    SELECT @endIndex = LEN(@USERNAME); 
    end 
    if @endEmailIndex = 0 
    begin 
    SELECT @endEmailIndex = LEN(@EMAILID); 
    end 
    INSERT INTO dbo.TABLE_1 VALUES(SUBSTRING(@USERNAME,@startIndex,@endIndex), SUBSTRING(@EMAILID,@startEmailIndex,@endEmailIndex)); 

    SELECT @startIndex = @endIndex +1; 
    SELECT @startEmailIndex = @endEmailIndex +1; 
    END 

Cela devrait work.But vous pouvez supprimer la redondance ci-dessus en extrayant l'opération de fractionnement ci-dessus pour une fonction .just remplacer le table_1 avec votre nom de table et ajouter d'autres colonnes dans l'instruction d'insertion qui sont nécessaires