1. Dieses Beispiel zeigt wie man binäre Dateien Im- und Exportieren kann.
/*
CREATE NONCLUSTERED INDEX file_id_idx
ON bindata (file_id)
- /
- Prozedur laden:
DECLARE
@filename VARCHAR(512),
@sql VARCHAR(512);
DECLARE a_cur CURSOR STATIC FOR
SELECT filepath FROM files;
/*WHERE file_id >(SELECT MAX(file_id) FROM bindata); This part is needed when you load the data NOT for the first time from the files table. */
OPEN a_cur
FETCH NEXT FROM a_cur INTO @filename;
WHILE (@@fetch_status=0)
BEGIN
using dynamic sql in order to use the @filename variable
SET @sql ='INSERT INTO bindata(data)
SELECT * FROM
OPENROWSET(BULK
+ @filename+, SINGLE_BLOB) as f;'
EXEC (@sql);
FETCH NEXT FROM a_cur INTO @filename;
END;
CLOSE a_cur;
DEALLOCATE a_cur;
- Der Prozess zum Laden der Daten hängt natürlich von der Anzahl und Größe aller Dateien die Sie laden wollen ab.
- Exportieren der Daten aus der Datenbank:
- Um die Daten zu exportieren benutzen wir das folgende Script, um dieses Script zu benutzen müssen wir es zuvor aktivieren.
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO
- Um mehr über die xp_cmdshell zu lesen, klicken Sie bitte hier
- Export Prozedur :
DECLARE
@a INT
DECLARE @i INT,
@filename VARCHAR(300),
@cmd VARCHAR(500)
SET @i = 0;
SELECT @a=max(file_id) from bindata; -- for speeding up this query
abit you may want to create and INDEX on file_id
WHILE @i != @a
BEGIN
SET @filename = 'd:\tmp\'+CAST (@i AS VARCHAR)+'.dat';
SELECT @filename;
SET @cmd =
'bcp "SELECT data FROM db1.dbo.bindata WHERE file_id='+
CAST(@i+1 AS VARCHAR)+'" queryout '+@filename+' -T -N';
EXEC master..xp_cmdshell @cmd;
SET @i=@i+1;
END;