在SQL Server的大容量插入中确定哪些记录来自哪个文件
有没有一种方法可以在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(
.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_转储表的源列,以便识别哪些记录来自哪个文件。人们会告诉您应该参数化动态查询。如果每个文件没有太多的记录要处理,我会先插入一个不同的临时表,并用文件名更新它,将这些记录移动到最终的临时表中,然后清除第一个临时表以用于下一个文件。