Вот что вы можете изменить в соответствии с вашими требованиями. У меня была аналогичная задача, когда мы получили файлы SFTP
нам из системы Linux, и мне нужно было загрузить эти данные в SQL Server. Вот базовый макет ... понимание местоположений файлов, разрешений на папку, разрешений SQL и т. Д. Все нужно учитывать. Включая, если вы можете запустить командный код оболочки в своей среде.
CREATE procedure [dbo].[file_upload]
as
DECLARE @dt VARCHAR(10) --date variable but stored as VARCHAR for formatting of file name
DECLARE @fileLocation VARCHAR(128) = 'E:\SomeFolder\' --production location which is
DECLARE @sql NVARCHAR(4000) --dynamic sql variable
DECLARE @fileName VARCHAR(128) --full file name variable
--This stores the file names into a temp table to be used in a cursor.
--The bottom part is handleing some date formatting i needed. You can change to what your files look like
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
,fileDate date null
,fileTime time null)
INSERT #FileNames (subdirectory,depth,isfile)
EXEC xp_dirtree @fileLocation, 1, 1
UPDATE #FileNames SET
fileDate = CAST(SUBSTRING(subdirectory,LEN(subdirectory) - 19,10) AS DATE)
,fileTime = CAST(REPLACE(SUBSTRING(subdirectory,LEN(subdirectory) - 8,5),'-',':') AS TIME)
--here's the cursor to loop through all the files
DECLARE c CURSOR FOR
select subdirectory from #FileNames
OPEN c
FETCH NEXT FROM c INTO @fileName
--For each file, bulk insert or what ever you want...
WHILE @@FETCH_STATUS = 0
BEGIN
--set the dynamic with the appropriate delimiters, if you want to keep headers, etc.
SET @sql = 'BULK INSERT Server.dbo.someTable FROM '''+ @fileLocation + @fileName +''' WITH (FIELDTERMINATOR = ''|'',FIRSTROW=2,KEEPNULLS,ROWTERMINATOR = ''0x0a'')'
EXEC(@sql)
--do some other stuff like logging, updating, etc...
END
CLOSE c
DEALLOCATE c
Вы можете использовать динамический SQL для всей команды или, например, использовать bcp вместо –
Отредактировано для улучшения удобочитаемости. –
Чтобы автоматизировать процесс импорта, вы можете использовать [SSIS] (https://msdn.microsoft.com/en-gb/library/ms169917.aspx?f=255&MSPPError=-2147217396). SSIS - это гибкий инструмент. Но эта гибкость стоит дорого. Сложнее сначала предложить подход @JamesZ. –