Aggiornamento dati da file esterno su tabella in database sqlserver

venerdì 08 ottobre 2010 - 11.06

mauri1961 Profilo | Senior Member

Ho una procedura automatizzata con la schedulazione di windows che quotidianamente preleva una serie di dati e li importa in una tabella sql attraverso la funzione di BULK INSERT. Questi dati sono univoci e non possono riproporsi. Tuttavia qualche giorno fa a causa di un malfunzionamento della procedura esterna dalla quale prelevo il giornaliero archivietto mi sono stati riproposti i dati del giorno addietro e la procedura automatica mi ha duplicato in tabella i suddetti.
Esiste con BULK INSERT la possibilità di scartare l'aggiornamento di elementi già presenti o devo utilizzare altre tipologie di script?

Grazie, Maurizio

lbenaglia Profilo | Guru

>Esiste con BULK INSERT la possibilità di scartare l'aggiornamento
>di elementi già presenti o devo utilizzare altre tipologie di
>script?
La seconda
Potresti banalmente importare i dati in una tabella di stage e popolare la tabella di destinazione escludendo le eventuali righe comuni.

>Grazie, Maurizio
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

mauri1961 Profilo | Senior Member

Perdona l'estrema ignoranza in materia, penso che con con una tabella di stage Tu intenda creare una tabella dove passare i dati quotidiani. Non saprei però cosa fare per confrontare le due tabelle ed, eventualmente, come scartare determinati dati.

Grazie. Maurizio

lbenaglia Profilo | Guru

>penso che con con una tabella di stage Tu intenda creare una tabella dove passare
>i dati quotidiani.
Si, una tabella di appoggio nella quale carichi i dati quotidiani e che ripulisci al termine dell'importazione nella tabella di destinazione.
Potrebbe tranquillamente essere una tabella temporanea, valuta tu...

>Non saprei però cosa fare per confrontare
>le due tabelle ed, eventualmente, come scartare determinati dati.
Presumo che ci sia una PK e che le verifiche le faccia sulle colonne che la costituiscono.
Puoi utilizzare l'operatore EXCEPT per escludere le righe eventualmente già inserite nella tabella di destinazione.
http://msdn.microsoft.com/it-it/library/ms188055.aspx

>Grazie. Maurizio
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

mauri1961 Profilo | Senior Member

Se ho capito quindi dovrei sia nella tabella di appoggio che in quella di destinazione definire la stessa PK (peraltro formata da una sola colonna), e a livello di script eseguire una INSERT sulla tabella di destinazione, confrontare le pk attraverso le select e con la clusola EXCEPT eliminare le eventuali doppie?

Giusto ? mah....

Maurizio

lbenaglia Profilo | Guru

>Giusto ? mah....

Osserva il seguente esempio:

USE tempdb; CREATE TABLE dbo.Students( StudentID int NOT NULL PRIMARY KEY, FirstName varchar(10) NOT NULL, LastName varchar(10) NOT NULL ); CREATE TABLE dbo.StudentsStage( StudentID int NOT NULL PRIMARY KEY, FirstName varchar(10) NOT NULL, LastName varchar(10) NOT NULL ); INSERT dbo.Students VALUES (1, 'Lorenzo', 'Benaglia') , (2, 'David', 'De Giacomi'); INSERT dbo.StudentsStage VALUES (1, 'Lorenzo', 'Benaglia') , (3, 'Matteo', 'Raumer') , (4, 'Marco', 'Caruso'); INSERT dbo.Students SELECT * FROM dbo.StudentsStage EXCEPT SELECT * FROM dbo.Students; SELECT * FROM dbo.Students; /* Output: StudentID FirstName LastName ----------- ---------- ---------- 1 Lorenzo Benaglia 2 David De Giacomi 3 Matteo Raumer 4 Marco Caruso (4 row(s) affected) */ DROP TABLE dbo.StudentsStage, dbo.Students;

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

mauri1961 Profilo | Senior Member

GRAZIE FUNZIONA PERFETTAMENTE !!!

MAURIZIO
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5