>Clausola USING che specifica l'origine dati da unire in join con la destinazione.
>ma la using che non capisco in quanto io i dati da salvare o aggiornare li
>passo tramite parametri alla stored ma vengono presi dai campi
>input delle form o delle pagine aspx
>dove faccio confusione?
diciamo che puoi usare un trick, creando un record virtuale sulle var passate, tipo:
USE tempdb;
GO
CREATE TABLE #tempDestination
(
id int IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED
, valore int
, tempo datetime
, stringa varchar(20)
);
INSERT INTO #tempDestination ( valore, tempo, stringa )
VALUES
( 1, NULL, '' )
, ( 2, NULL, '' )
, ( 3, NULL, '' );
-- prima di inserire o aggiornare
SELECT * FROM #tempDestination TD;
/*
id valore tempo stringa
----------- ----------- ----------------------- --------------------
1 1 NULL
2 2 NULL
3 3 NULL
*/
-- dati per una update
DECLARE @var1 int = 1;
DECLARE @var2 int = 2;
DECLARE @var3 datetime = GETDATE();
DECLARE @var4 varchar(20) = 'PROVA';
MERGE #tempDestination DEST
USING (SELECT @var1, @var2, @var3, @var4) SRC (New_id, New_valore, New_tempo, New_stringa)
ON SRC.New_id = DEST.id
WHEN MATCHED THEN
UPDATE
SET
valore = SRC.New_valore
, tempo = SRC.New_tempo
, stringa = SRC.New_stringa
WHEN NOT MATCHED THEN
INSERT (valore, tempo, stringa)
VALUES (SRC.New_valore, SRC.New_tempo, SRC.New_stringa);
-- dopo merge per modifica
SELECT * FROM #tempDestination TD;
/*
id valore tempo stringa
----------- ----------- ----------------------- --------------------
1 2 2012-05-25 12:20:56.087 PROVA AGGIORNATO IL RECORD CON ID 1
2 2 NULL
3 3 NULL
*/
-- dati per una insert
SET @var1 = 5;
SET @var2 = 2;
SET @var3 = GETDATE();
SET @var4 = 'PROVA';
-- rieseguo merge
MERGE #tempDestination DEST
USING (SELECT @var1, @var2, @var3, @var4) SRC (New_id, New_valore, New_tempo, New_stringa)
ON SRC.New_id = DEST.id
WHEN MATCHED THEN
UPDATE
SET
valore = SRC.New_valore
, tempo = SRC.New_tempo
, stringa = SRC.New_stringa
WHEN NOT MATCHED THEN
INSERT (valore, tempo, stringa)
VALUES (SRC.New_valore, SRC.New_tempo, SRC.New_stringa);
-- dopo merge per inserimento
SELECT * FROM #tempDestination TD;
/*
id valore tempo stringa
----------- ----------- ----------------------- --------------------
1 2 2012-05-25 12:20:56.087 PROVA
2 2 NULL
3 3 NULL
4 2 2012-05-25 12:20:56.093 PROVA INSERITO IL NUOVO RECORD CON ID 5
*/
-- pulizia
DROP TABLE #tempDestination;
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT
http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi