22 messaggi dal 04 settembre 2008
Ciao a tutti.

Ho dei problemi ad eseguire la funzione MERGE.
Qui sotto si trova lo script che dovrebbe aggiornare
la mia tabella Utenti creata con SQL Server 2005 con
i dati presi da Active Directory.

La select all'interno di USING funziona se eseguita da sola.
Attraverso la funzione MERGE vorrei inserire se un utente non esiste
o aggiornare i dati se esiste.

Spero che qualcuno possa aiutarmi, è urgente. Grazie.


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create or replace
PROCEDURE AGGIORNA_TABELLA_UTENTI AS
BEGIN

--start
  merge into Utenti u

  --seleziona tutti gli utenti da active directory
    using 
  (
    SELECT givenname AS Nome, sn AS Cognome, PhysicalDeliveryOfficeName as Gruppo, 
    department as Dipartimento, telephoneNumber as Telefono,
    mobile as Cellulare, facsimileTelephoneNumber AS Fax, mail as Email, 
      title as Grado, userAccountControl
    FROM OPENROWSET
    (
      'ADSDSOObject', 
      'SACE',
      'SELECT givenname, sn, PhysicalDeliveryOfficeName, mail, telephoneNumber,
        mobile, facsimileTelephoneNumber,
        title, department, company, userAccountControl
      FROM ''LDAP://OU=Users,OU=Lug-Franscini,DC=cbglugano,DC=local'' 
      WHERE
        objectCategory=''user'' 
        AND objectcategory=''person''
       ORDER BY sn' 
    )
    where givenname NOT LIKE 'Template%'
    and givenname NOT LIKE '_Template%'
    AND userAccountControl != 514
    order by Nome
  ) ActiveDirectory --Alias ActiveDirectory

--controlla se trova una corrispondenza tra la tabella "Utenti" e "Active Directory"
on (u.utente_mail = ActiveDirectory.mail)

--se trova una corrispondenza e useraAccountControl == 514, 
--allora aggiorna i dati e imposta lo stato su 'Non attivo'
  when matched and userAccountControl == 514 then 
    update set u.utente_nome = ActiveDirectory.Nome, u.utente_cognome = ActiveDirectory.Cognome,
  u.utente_gruppo = ActiveDirectory.Gruppo, u.utente_dipartimento = ActiveDirectory.Dipartimento,
  u.utente_telefono = ActiveDirectory.Telefono, u.utente_cellulare = ActiveDirectory.Cellulare,
  u.utente_fax = ActiveDirectory.Fax, u.utente_mail = ActiveDirectory.Email, 
  u.utente_grado = ActiveDirectory.Grado, u.utente_stato = 'Non attivo'

--se trova una corrispondenza 
--allora aggiorna i dati
  when matched and userAccountControl != 514 then 
    update set u.utente_nome = ActiveDirectory.Nome, u.utente_cognome = ActiveDirectory.Cognome,
  u.utente_gruppo = ActiveDirectory.Gruppo, u.utente_dipartimento = ActiveDirectory.Dipartimento,
  u.utente_telefono = ActiveDirectory.Telefono, u.utente_cellulare = ActiveDirectory.Cellulare,
  u.utente_fax = ActiveDirectory.Fax, u.utente_mail = ActiveDirectory.Email, 
  u.utente_grado = ActiveDirectory.Grado

--se non trova una corrispondenza, allora inserisci il nuovo utente
 when not matched and userAccountControl != 514 then
  insert 
  (
    utente_nome, utente_cognome, utente_gruppo, utente_dipartimento, 
    utente_telefono, utente_cellulare, utente_fax, utente_mail,
    utente_grado, utente_stato
  )
  values 
  (
    ActiveDirectory.Nome, ActiveDirectory.Cognome, ActiveDirectory.Gruppo, 
    ActiveDirectory.Dipartimento, ActiveDirectory.Telefono,
    ActiveDirectory.Cellulare, ActiveDirectory.Fax, ActiveDirectory.Email, 
    ActiveDirectory.Grado, 'A'
  )

  commit;
END;
GO


Modificato da sharepointhelp il 29 dicembre 2008 12.51 -
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
L'istruzione MERGE è stata introdotta in SQL Server 2008...
22 messaggi dal 04 settembre 2008
oh no...

Alternativa per fare quello che voglio?
Modificato da sharepointhelp il 29 dicembre 2008 13.56 -
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Come gli antichi... :-)
Ovvero una triplice istruzione di INSERT / UPDATE / DELETE...

Bye
22 messaggi dal 04 settembre 2008
Non capisco come eseguire il controllo quando esiste un utente e quindi aggiornare i dati e quando non esiste e quindi inserirli. Delete non mi serve.

grazie mille.
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Segui l'esempio che indico qui

http://community.ugiss.org/blogs/lbianchi/archive/2007/11/08/operatore-merge-in-sql-server-2008.aspx

Bye

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.