2010-12-02 10 views
1

J'ai le SQL ci-dessous et je veux mettre à jour le managerNTID avec @managerNTID seulement si l'enregistrement DB des utilisateurs a StopManagerOverride valeur de 0, si elle est définie sur 1 sur l'enregistrement, alors je ne sais pas souhaitez mettre à jour ce champ:SQL Server 2005 mise à jour conditionnelle d'un champ

UPDATE ee 
SET 
    MangerId  = CASE ee.ShopManagerOverride 
          WHEN 0 THEN @MangerId 
          ELSE ee.MangerId 
          END 
    ,ManagerNTID  = CASE ee.ShopManagerOverride 
          WHEN 0 THEN @managerNTID 
          ELSE ee.ManagerNTID 
          END 
    ,NTID    = @NTID 
    ,FirstName   = @FirstName 
    ,LastName   = @LastName 
    ,FullName   = @FullName 
    ,ReportingGroup  = @ReportingGroup 
    ,DistinguishedName = @DistinguishedName 
    ,IsActive   = 1 
    --,StopManagerOverride= 1 
    ,LastUpdate   = GETDATE() 
    ,UpdateBy   = @UpdateBy 
FROM dbo.Employees ee 
    Inner Join dbo.Employees e ON e.NTID = ee.NTID 
WHERE ee.NTID = @NTID 

Réflexions sur la façon de faire ce un champ dans la mise à jour ont une condition en ligne?

edit: je suis presque là, juste besoin de résoudre quelques colonnes ambiguës maintenant. mes yeux sont déjà rouges.

Répondre

0

Vous pouvez essayer quelque chose comme ça - si le ShopManagerOverride est réglé sur 1, le mettre à jour la valeur du paramètre transmis, mettre à jour sinon à la valeur qu'il a déjà (je suppose aussi votre domaine est vraiment ManagerId - non MangerId - right ??):

UPDATE 
    dbo.Employees 
SET 
    ManagerId = @ManagerId, 
    ManagerNTID = CASE e.ShopManagerOverride 
        WHEN 1 THEN @managerNTID 
        ELSE e.ManagerNTID 
        END, 
    NTID = @NTID, 
    FirstName = @FirstName, 
    LastName = @LastName, 
    FullName = @FullName, 
    ReportingGroup = @ReportingGroup, 
    DistinguishedName = @DistinguishedName, 
    IsActive = 1, 
    LastUpdate = GETDATE(), 
    UpdateBy = @UpdateBy 
FROM 
    dbo.Employees e 
WHERE 
    e.NTID = dbo.Employees.NTID 
    AND dbo.Employees.NTID = @NTID 

Untested, directement et "main libre" de mon cerveau - j'espère avoir la bonne syntaxe! Essayez-le - ça marche, fait-il ce que vous cherchez?

+0

oui, parfait, mais il y a une erreur de syntaxe im essayant de fixer près de – kacalapy

+0

merci pour l'aide – kacalapy

+0

@kacalapy: oh, à droite - désolé, j'espère que ma mise à jour corrige cette erreur de syntaxe –

0

Je me demandais comment faire cela aussi. J'ai vu des déclarations de cas, mais je ne sais pas si cela fonctionnerait dans cette situation. Comment je l'ai fait dans le passé est avec copier et coller, puis aller comme ça

if (conditional) 
Begin 
Update statement with field 
End 
Else 
Begin 
update statement without field 
End 

Ok Essayez quelque chose comme ça, je ne sais pas si cela fonctionne, mais il vous donne une direction pour essayer de

UPDATE Employees 
SET 
    MangerId   = @MangerId 
    ,ManagerNTID  = @managerNTID 
    ,NTID    = @NTID 
    ,FirstName   = @FirstName 
    ,LastName   = @LastName 
    ,FullName   = @FullName 
    ,ReportingGroup  = @ReportingGroup 
    ,DistinguishedName = @DistinguishedName 
    ,IsActive   = 1 
    ,StopManagerOverride= CASE Conditional WHEN True THEN (value to set it to) 
    ELSE (pre existing value of the row) END; 

    ,LastUpdate   = GETDATE() 
    ,UpdateBy   = @UpdateBy 
WHERE NTID = @NTID 
+0

qui est le code va faire laides et ajouter de nombreuses lignes ... et j'ai demandé une solution en ligne ... – kacalapy

+0

im tester avec ceci maintenant ... un i sur la bonne voie? – kacalapy

+0

UPDATE employés \t SET \t \t MangerId \t \t \t = @MangerId \t \t -, ManagerNTID \t \t = @managerNTID \t \t, ManagerNTID \t \t = (cas où (StopManagerOverride sélectionner à partir de la fonction où NTID = @NTID) = 1 alors \t \t \t \t \t \t \t \t (fr sélectionner ManagerNTID Les employés om où NTID = @NTID) else \t \t \t \t \t \t \t \t @managerNTID \t \t \t \t \t \t \t fin) \t \t, NTID \t \t \t \t = @NTID \t \t, FirstName \t \t \t = @FirstName \t \t, NOM \t \t \t = @LastName \t \t, NomComplet \t \t \t = @FullName \t \t, ReportingGroup \t \t = @ReportingGroup \t \t, DistinguishedName \t = @DistinguishedName \t \t, IsActive \t \t \t = 1 \t \t -, StopManagerOverride = 1 \t \t, LastUpdate \t \t \t = GETDATE() \t \t, UpdateBy \t \t \t = @UpdateBy \t OÙ NTID = @NTID – kacalapy

0

Une autre façon est

If StopManagerOverride = 0 
Begin 
Set @ManagerNTID = Select Existing Value of the row 
END 

poursuivez la déclaration de mise à jour normale

Questions connexes