我有一個名爲「sp_BulkInsert」的存儲過程,它將一個.csv文件插入到我的數據庫中,當您執行時指定文件的完整路徑它。我試圖創建另一個名爲「sp_ResultsDump」的存儲過程,在其中指定文件夾路徑,然後在文件夾中搜索所有.csv文件,創建一個帶有文件名的表,然後在執行「sp_BulkInsert」時循環遍歷該表的各行,爲文件夾中的每個.csv文件(其名稱記錄在上一個表格中)。T-SQL:創建獲取路徑文件夾並插入到文件路徑的存儲過程
下面是代碼:
--Step 0: Create Stored Procedure
CREATE PROCEDURE sp_ResultsDump
@PathFolder VARCHAR(2000)
AS
--Step 1: Create table of file names
IF EXISTS (SELECT 1
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
AND TABLE_NAME='Files')
DROP TABLE Files
CREATE TABLE Files(FileID INT IDENTITY NOT NULL, FileName VARCHAR(max))
DECLARE @PathExec VARCHAR(1000)
SET @PathExec = "dir '"[email protected]+"'.csv /B"
INSERT INTO Files(FileName) EXEC master..xp_cmdshell @PathExec
DELETE Files WHERE FileName IS NULL
--Step 2: Get # of files, declare and initialize iterator
DECLARE @RowCount INT, @I INT
SET @RowCount = (SELECT COUNT(FileName) FROM Files)
SET @I = 1
--Step 3: Loop through the rows of a table and execute sp_ResultsDump for each file
WHILE (@I <= @RowCount)
BEGIN
DECLARE @FileName VARCHAR(1000)
SELECT @FileName = FileName FROM Files WHERE FileID = @I
SELECT @FileName = @[email protected]
EXEC sp_BulkInsert @FileName
SET @I = @I + 1
END
我已經證實,當我指定的文件夾中(不創建存儲過程或動態@variable),然而存儲@PathFolder步驟1-3的工作似乎成爲問題。例如,我想抓取C:\中的所有.csv文件,並且每個通過循環的@FileName將遍歷表文件列FileName中包含的文件名。
我想要做的是能夠執行下面的代碼,這樣我可以得到一個指定的文件夾中所有的.csv文件,併成功地批量插入他們到我的數據庫:
EXEC sp_ResultsDump 'c:\'
原因這是因爲文件夾路徑可能稍後會更改,我希望用戶能夠指定它。
我相信「SELECT @FileName = @ PathFolder + @ FileName」不正確,我嘗試了各種引號和+的組合。步驟1和3似乎都有@PathFolder的問題。
我想我只需要我的while循環的幫助,因爲我認爲如果我的while循環是正確的,這應該是好的。
有什麼建議嗎?簡單的語法錯誤的地方?提前致謝。
嘿謝謝回覆。我試着改變它,而且我仍然收到相同的錯誤信息。在處理遊標變量時,雙引號和單引號如何正確工作? 另外,下列有效嗎? SELECT @FileName =「'」+ @ PathFolder +「''」+ @ FileName +「'」 EXEC sp_BulkInsert @FileName – 2010-08-26 02:36:24