2016-03-28 20 views
1
DECLARE @SQL_BULK VARCHAR(MAX) 

SET @SQL_BULK = 'BULK INSERT [dbo].[Table] 
       FROM ''' + @BatchFileName + ''' 
       WITH 
       (
        FIRSTROW = 2, 
        FIELDTERMINATOR = ''\t'', 
        ROWTERMINATOR = ''0x0a'' 
       )' 

EXEC (@SQL_BULK) 

Ich habe diesen Code, um eine Massenlast zu tun. Funktioniert gut, aber ich würde gerne die @BatchFileName auch dort als eine Spalte haben (jede Zeile enthält den gleichen Wert).Dateinamen beim Laden in SQL Server einfügen

Ist dies während der Massenbelastung möglich? Oder wie kann ich es später in einer separaten Funktion hinzufügen?

Vielen Dank im Voraus

Antwort

2

ich benutze dieses Skript iterieren und bulkinsert Dateien im Verzeichnis:

create table #x (name varchar(200)) 
DECLARE @query varchar (1000),@conta int ,@query2 varchar (1000),@NOME varchar(50) 
set @conta=1 
set @query ='master.dbo.xp_cmdshell "dir '+'C:\directoryname'+'*.csv' +' /b"' 
insert #x exec (@query) 
delete from #x where name is NULL 
select identity(int,1,1) as ID, name into #y from #x 
drop table #x 
WHILE @conta<221 --number of files 

BEGIN 
SELECT @NOME=name FROM #y WHERE [email protected] 
set @Query2 ='BULK INSERT [dbo].[tablename] FROM '+ '''C:\directoryname'[email protected]+''' 
    WITH (
FIELDTERMINATOR = '','',ROWTERMINATOR = ''0x0a'')' 
SELECT @query2 
exec (@Query2) 

set @[email protected]+1 

END 
drop table #y