2010-06-16 14 views
5

Dire Ho una tabella chiamata Employee (ha ID, NAME, ADDRESS, e PHONE colonne). (Non è il mio vero problema, ma semplificato per rendere la questione più facile.)Come utilizzare il comando merge

Se io chiamo uno sProc chiamata UpdateEmployee e passo in un @Name, @Address, @Phone e @ID.

Si può utilizzare l'unione per controllare facilmente se esiste l'ID? Se lo fa per aggiornare il nome, l'indirizzo e il telefono? e se non li inserisce?

Vedo esempi in rete, ma sono enormi e pelosi. Vorrei un semplice esempio semplice se possibile.

(. Recentemente abbiamo aggiornato a SQL 2008, quindi sono nuovo al comando merge)

risposta

7

Il codice di Bill Karwin è quasi corretto. Ho apportato le modifiche necessarie. Giocare con i valori delle variabili ti permetterà di vederlo in azione. Tabella:

CREATE TABLE [dbo].[employee](
    [ID] [int] NULL, 
    [Name] [char](20) NULL, 
    [Address] [char](20) NULL, 
    [Phone] [int] NULL 
) ON [PRIMARY] 

Codice:

DECLARE @ID int, @NAME char(20), @ADDRESS char(20), @PHONE int 
SET @ID=2 
SET @NAME='Jenny' 
SET @ADDRESS='11 My St' 
SET @PHONE=228326 

MERGE Employee AS target 
USING (SELECT @ID, @NAME, @ADDRESS, @PHONE) AS source (ID, Name, Address, Phone) 
ON (target.ID = source.ID) 
WHEN MATCHED THEN 
    UPDATE SET NAME = source.Name, 
      ADDRESS = source.Address, 
      PHONE = source.Phone 
WHEN NOT MATCHED THEN 
    INSERT (ID, NAME, ADDRESS, PHONE) 
    VALUES (source.ID, source.Name, source.Address, source.Phone); 
+1

+1 Grazie per averlo messo alla prova! –

5

non ho ancora testato questo, ma sulla base del docs questo può farti sulla strada giusta:

MERGE myschema.Employee AS target 
USING (SELECT @ID, @NAME, @ADDRESS, @PHONE) AS source (ID, Name, Address, Phone) 
ON (target.ID = source.ID) 
WHEN MATCHED THEN 
    UPDATE SET NAME = source.Name 
      ADDRESS = source.Address 
      PHONE = source.Phone 
WHEN NOT MATCHED THEN 
    INSERT (ID, NAME, ADDRESS, PHONE) 
    VALUES (source.ID, source.Name, source.Address, source.Phone) 
+1

+1 per fare la maggior parte del lavoro! – Kenneth

Problemi correlati