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