2010-06-16 15 views
5

że mam tabeli o nazwie Employee (ma ID, NAME, ADDRESS i PHONE kolumny). (To nie jest mój prawdziwy problem, ale uproszczone, aby kwestia łatwiejsze.)Jak użyć polecenia scalania

Jeśli nazywam sproc nazwie UpdateEmployee i mijam w @Name, @Address, @Phone i @ID.

Czy można użyć kombinacji, aby łatwo sprawdzić, czy identyfikator istnieje? Jeśli ma zaktualizować nazwę, adres i telefon? i czy nie ma ich wstawiać?

Widzę przykłady w sieci, ale są ogromne i włochate. Chciałbym miły prosty przykład, jeśli to możliwe.

(. Niedawno uaktualniony do SQL 2008, więc jestem nowy na polecenia scalania)

Odpowiedz

7

Kod Billa Karwina jest prawie poprawny. Wprowadziłem potrzebne zmiany. Granie z wartościami zmiennych pozwoli ci zobaczyć to w akcji. Tabela:

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

Kod:

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 Dziękujemy za wystawienie go na próbę! –

5

nie testowałem, ale w oparciu o docs ten może dostać się na właściwej drodze:

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 Dla robi większość pracy! – Kenneth

Powiązane problemy