在SQL Server的大容量插入中确定哪些记录来自哪个文件

在SQL Server的大容量插入中确定哪些记录来自哪个文件,sql,sql-server,Sql,Sql Server,有没有一种方法可以在SQL Server中以大容量插入的方式捕获哪些记录来自哪个文件 我有一个包含.csv文件的文件夹,我正在使用此代码进行批量插入 IF OBJECT_ID('TEMPDB..#TEMP_FILES') IS NOT NULL DROP TABLE #TEMP_FILES CREATE TABLE #TEMP_FILES ( FileName VARCHAR(MAX), DEPTH VARCHAR(MAX), [FILE] VARCHAR(

有没有一种方法可以在SQL Server中以大容量插入的方式捕获哪些记录来自哪个文件

我有一个包含
.csv
文件的文件夹,我正在使用此代码进行批量插入

IF OBJECT_ID('TEMPDB..#TEMP_FILES') IS NOT NULL 
     DROP TABLE #TEMP_FILES

CREATE TABLE #TEMP_FILES
(
    FileName VARCHAR(MAX),
    DEPTH VARCHAR(MAX),
    [FILE] VARCHAR(MAX)
)
 
INSERT INTO #TEMP_FILES
    EXEC master.dbo.xp_DirTree 'C:\Test\',1,1

--select * from #TEMP_FILES
INSERT INTO CSV_FILES ([source])
    SELECT FileName FROM #TEMP_FILES 
 
DECLARE @FILENAME VARCHAR(MAX), @SQL VARCHAR(MAX)
 
IF OBJECT_ID('TEMPDB..#TEMP_RESULTS') IS NOT NULL 
     DROP TABLE #TEMP_RESULTS

CREATE TABLE #TEMP_RESULTS
(
    [Address] VARCHAR(MAX),
    [BedRoom] VARCHAR(MAX),
    [Baths] VARCHAR(MAX),
    [SquareFootage] VARCHAR(MAX),
    [Garage] VARCHAR(MAX),
    [filename] VARCHAR(MAX)
)
 
WHILE EXISTS(SELECT * FROM #TEMP_FILES)
BEGIN
   BEGIN TRY
      SET @FILENAME = (SELECT TOP 1 FileName FROM #TEMP_FILES)
      SET @SQL = 'BULK INSERT  #TEMP_RESULTS
                  FROM ''C:\Test\' + @FILENAME +'''
                  WITH (FIRSTROW = 2, FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'');'


      -- INSERT INTO #TEMP_RESULTS ([FileName]) SELECT (FileName) FROM #TEMP_FILES

      PRINT @SQL
      EXEC(@SQL)
   END TRY
   BEGIN CATCH
      PRINT 'Failed processing : ' + @FILENAME
   END CATCH

   UPDATE #TEMP_RESULTS 
   SET filename = 1

   DELETE FROM #TEMP_FILES 
   WHERE FileName = @FILENAME
END 

SELECT * FROM #TEMP_RESULTS

INSERT INTO csv_dump ([Address], [BedRoom], [Baths], [SquareFootage],[Garage], [source]) 
    SELECT
        [Address],
        [BedRoom],
        [Baths],
        [SquareFootage],
        [Garage],
        [filename] 
    FROM 
        #TEMP_RESULTS

是否有一种方法可以将CSV_文件表的源列数据插入CSV_转储表的源列,以便识别哪些记录来自哪个文件。

人们会告诉您应该参数化动态查询。如果每个文件没有太多的记录要处理,我会先插入一个不同的临时表,并用文件名更新它,将这些记录移动到最终的临时表中,然后清除第一个临时表以用于下一个文件。