2013-06-14 2 views
1

J'ai une table SQL où j'ai besoin de mettre à jour le champ Date de plusieurs utilisateurs. Le champ clé primaire (userId) est int. Maintenant, j'envoie les valeurs Date dans une chaîne séparée par des virgules (comme "10/06/2013,12/05/2013,16/07/2013") et les valeurs userId correspondantes également dans une chaîne séparée par une virgule (comme "1001,1002 1005 ").Mise à jour de la table SQL avec des valeurs à mettre à jour et des valeurs à comparer dans des chaînes séparées par des virgules séparées

Comment puis-je mettre à jour tous les utilisateurs pertinents dans ma procédure stockée? Ou devrais-je envoyer le userId s et le Date s d'une autre manière?

Répondre

1

essayer cette

DECLARE @dates VARCHAR(8000) = '10/06/2013,12/05/2013,16/07/2013'  
    DECLARE @userid VARCHAR(8000) = '1001,1002,1005'  

    DECLARE @t1 TABLE 
     (
      dates VARCHAR(50) , 
      userid VARCHAR(50) 
     ) 

    WHILE CHARINDEX(',', @dates) > 0 
     BEGIN 



      INSERT INTO @t1 
        (dates , 
         userid 
        ) 
      VALUES (SUBSTRING(@dates, 1, (CHARINDEX(',', @dates) - 1)) , 
         SUBSTRING(@userid, 1, (CHARINDEX(',', @userid) - 1)) 
        ) 

      SET @dates = SUBSTRING(@dates, CHARINDEX(',', @dates) + 1, 
            LEN(@dates)) 

      SET @userid = SUBSTRING(@userid, CHARINDEX(',', @userid) + 1, 
            LEN(@userid)) 

     END 
    INSERT INTO @t1 
      (dates, userid) 
    VALUES (@dates, @userid) 
    SELECT * 
    FROM @t1 AS t 

    UPDATE LMS.dbo.Employee 
    SET  JoiningDate = (SELECT dates 
          FROM @t1 AS t 
          WHERE LMS.dbo.Employee.Code = t.userid 
         ) 
0

Ce serait bien si vous envoyez un XML avec date et identifiant. C'est comparativement plus rapide aussi.

0

C'est ce à quoi servent les instructions préparées. Créez une instruction UPDATE préparée. Et puis exécutez-le avec des valeurs différentes autant de fois que vous le souhaitez.

Questions connexes