28 messaggi dal 24 luglio 2006
Ciao a tutti
ho una domanda:
devo scrivere una stored che legga i dati da un file e li inserisca nel database.
avrei bisogno di sapere come leggere i dati da un file all'interno della stored procedure

grazie
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
fede_pippo ha scritto:
Ciao a tutti
ho una domanda:
devo scrivere una stored che legga i dati da un file e li inserisca nel database.
avrei bisogno di sapere come leggere i dati da un file all'interno della stored procedure

grazie


puoi avvantaggiarti di operazioni BULK anche in questo caso, sia utilizzando BULK INSERT che OPENROWSET( BULK...)...

presupponendo un file di dati da importare
define a file to be imported, say
d:\imp\data.txt like
[d:\imp\data.txt]
Fede,Pippo,1
Andrea,Montanari,2
[/d:\imp\data.txt]

definisci un file di formato che mappera' le colonne nel file di testo a quelle della tabella di destinazione, similramente a
[fmt.txt]
9.0
3
1 SQLCHAR 0 10 "," 1 lName ""
2 SQLCHAR 0 10 "," 2 fName ""
3 SQLCHAR 0 7 "\r\n" 3 Id ""
[/fmt.txt]

definisci poi un altro file di formato per un'altra esperienza come di seguito..
[fmt2.txt]
9.0
3
1 SQLCHAR 0 10 "," 1 lName ""
2 SQLCHAR 0 10 "," 2 fName ""
3 SQLCHAR 0 7 "\r\n" 0 Id ""
[/fmt2.txt]

tutte le colonne sono mappate o escluse relativamente alla tabella di destinazione, in modo da includere sia file di testo che siano conformi alla modellazione della tabella che ad altri dove esistano colonne spurie..
con il modello
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.Test (
fName varchar(10),
lName varchar(10) DEFAULT 'not set',
Id int DEFAULT -1000
);
GO
BULK INSERT dbo.Test
FROM 'd:\imp\Data.txt'
WITH (formatfile='d:\imp\fmt.txt');

SELECT * FROM dbo.Test;
GO
PRINT 'modifica il file di formato mettendo a 0 il numero della colonna ID';

BULK INSERT dbo.Test
FROM 'd:\imp\Data.txt'
WITH (formatfile='d:\imp\fmt2.txt');

SELECT * FROM dbo.Test;
GO
PRINT 'utilizza direttamente un INSERT ... specificando le colonne coinvolte';
SELECT lName
FROM OPENROWSET(BULK 'd:\imp\Data.txt',
FORMATFILE='d:\imp\fmt2.txt'
) AS t1;

INSERT INTO dbo.Test (fName)
SELECT lName
FROM OPENROWSET(BULK 'd:\imp\Data.txt',
FORMATFILE='d:\imp\fmt2.txt'
) AS t1;

SELECT * FROM dbo.Test;
GO
DROP TABLE dbo.Test;

otterrai il risultato
fName lName Id
---------- ---------- -----------
Fede Pippo 1
Andrea Montanari 2

modifica il file di formato mettendo a 0 il numero della colonna ID
fName lName Id
---------- ---------- -----------
Fede Pippo 1
Andrea Montanari 2
Fede Pippo -1000
Andrea Montanari -1000

utilizza direttamente un INSERT ... specificando le colonne coinvolte
lName
----------
Fede
Andrea

fName lName Id
---------- ---------- -----------
Fede Pippo 1
Andrea Montanari 2
Fede Pippo -1000
Andrea Montanari -1000
Fede not set -1000
Andrea not set -1000

tutto questo puo' essere tranquillamente inglobato in una procedura..
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
28 messaggi dal 24 luglio 2006
grazie seguirò i tuoi consigli
federico

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.