我需要使用OpenRowset函數將多個文件(file1,file2,file3 ...)上載到sql server數據庫中的表(表1,表2,表3 ...)。所有的文件保存在C:\ download 我使用下面的查詢,它工作正常。使用SQL Server上傳csv文件OpenRowSet函數
INSERT INTO dbo.Table1
SELECT * from OpenRowset('MSDASQL','Driver={Microsoft Text Driver (*.txt;*.csv)};DefaultDir=C:\download;','select * from File1.csv')
問題是如何傳遞文件名和表名作爲參數。
謝謝Tony的回答。我已經把sql存儲在一個存儲過程中,如下所示。但它比原始硬編碼文件和表名稱慢得多。任何建議使其運行速度更快。
ALTER proc [dbo].[ImportFiles]
@FilePath varchar(100) ,
@FileName varchar(100),
@TableName varchar(250)
AS
BEGIN
DECLARE @SqlStmt nvarchar(max)
DECLARE @ErrorCode int
SET @SqlStmt='Truncate table dbo.[' + @TableName +']'
EXEC(@SqlStmt);
-- i COULD PUT TRUNCATE statement in the sate statement as insert just before INSERT INTO.
set @SqlStmt=N'
INSERT INTO '[email protected]+N'
select *
from openrowset(''MSDASQL''
,''Driver={Microsoft Access Text Driver (*.txt, *.csv)};
DefaultDir='[email protected]+N'''
,''select * from "'[email protected]+N'"'')'
EXEC(@SqlStmt);
您是否有理由使用此方法導入數據?如果您有可用的SSIS,可能是更好的方式來執行多個文件導入。 – Tony
原因基本上是我對SSIS的瞭解不多,但是我沒有成功。 – rao
動態SQL通常較慢,但是您看到它減慢了多少?它慢了兩倍還是更多,這真的很重要嗎?如果整個過程需要幾分鐘的時間,那麼我不會擔心,花費數小時可能會有問題,但您多久執行一次導入? – Tony