Wie man mit einem dynamischen Wert für eine Spalte insert kann

die Situation ist das:

Ich habe 200 Txt-fileen mit verschiedenen Namen wie 601776.txt jeder file den Namen ist eigentlich ein ID_foo und es enthält einige data wie diese (2 Spalten):

04004 Albánchez 04006 Albox 04008 Alcóntar 04009 Alcudia de Monteagud . . . 

jetzt möchte ich BEGRENZEN diese TXT-fileen in eine SQL server-Tabelle, die 3 Spalte eine dieser Spalten sollte der Name der txt-file sein. Ich verwende ein PHP-Skript, also habe ich eine loop gemacht, um die filenamen zu bekommen und was dann?

 BULK INSERT Employee_Table FROM '../home/601776.txt' WITH ( FIELDTERMINATOR ='\t', ROWTERMINATOR = ''\n'' ) 

Wie kann ich die dritte Spalte setzen, während Bulk-Einfügen mit $ file_name Variable in jeder loop?

Denkst du, es ist eine bessere Idee, wenn es möglich ist, die Tabelle einzufügen, indem man die txt-file Zeile für Zeile liest? Und wie?

Vielen Dank

Dies ist eines der wenigen Male, dass ein Cursor tatsächlich ideal in SQL server ist. Hier ist ein path Sobald Sie die PRINT-statement sehen und zufrieden sind, können Sie es kommentieren und die beiden darunter liegenden Zeilen auskommentieren. Ich stelle eine Logik ein, um den filenamen und ein verarbeitetes date hinzuzufügen, das normalerweise benötigt wird, aber deine Tabellendefinition würde diese Spalten benötigen. Es sollte die Idee über.

 --------------------------------------------------------------------------------------------------------------- --Set some variables --------------------------------------------------------------------------------------------------------------- DECLARE @dt VARCHAR(10) --date variable but stored as VARCHAR for formatting of file name DECLARE @fileLocation VARCHAR(128) = 'E:\DATA_TRANSFERS\' --production location which is \\issqlstd01 but the xp_dirtree didn't like this DECLARE @sql NVARCHAR(4000) --dynamic sql variable DECLARE @fileName VARCHAR(128) --full file name variable --------------------------------------------------------------------------------------------------------------- --Get a list of all the file names in the directory --------------------------------------------------------------------------------------------------------------- IF OBJECT_ID('tempdb..#FileNames') IS NOT NULL DROP TABLE #FileNames CREATE TABLE #FileNames ( id int IDENTITY(1,1) ,subdirectory nvarchar(512) ,depth int ,isfile bit) INSERT #FileNames (subdirectory,depth,isfile) EXEC xp_dirtree @fileLocation, 1, 1 --------------------------------------------------------------------------------------------------------------- --Create a cursor to fetch the file names --------------------------------------------------------------------------------------------------------------- DECLARE c CURSOR FOR select subdirectory from #FileNames where isfile = 1 OPEN c FETCH NEXT FROM c INTO @fileName --------------------------------------------------------------------------------------------------------------- --For each file, bulk insert --------------------------------------------------------------------------------------------------------------- WHILE @@FETCH_STATUS = 0 BEGIN SET @sql = 'BULK INSERT Employee_Table FROM '''+ @fileLocation + @fileName +''' WITH (FIELDTERMINATOR = ''\t'',KEEPNULLS,ROWTERMINATOR = ''0x0a'')' --Try the bulk insert, if error is thrown log the error --Also update the Table Columns which aren't a part of the original file (load date and original file name) BEGIN TRY PRINT(@sql) --EXEC(@sql) --UPDATE Employee_Table SET OrigFile = @fileName, LoadDate = GETDATE() WHERE OrigFile IS NULL END TRY BEGIN CATCH SELECT ERROR_MESSAGE() END CATCH FETCH NEXT FROM c INTO @fileName END CLOSE c DEALLOCATE c GO