gpt4 book ai didi

tsql - T-SQL : Creating Stored Procedure that gets Path Folder and inserts into File Path

转载 作者:行者123 更新时间:2023-12-04 06:47:17 25 4
gpt4 key购买 nike

我有一个名为“sp_BulkInsert”的存储过程,它将一个 .csv 文件插入到我的数据库中,您在其中指定执行它时文件的完整路径。我正在尝试创建另一个名为“sp_ResultsDump”的存储过程,您可以在其中指定文件夹路径,然后在文件夹中搜索所有 .csv 文件,创建一个带有文件名的表,然后在执行“sp_BulkInsert”时遍历该表的行对于文件夹中的每个 .csv 文件(其名称记录在上表中)。

这是代码:

--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 '"+@PathFolder+"'.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 = @PathFolder+@FileName
EXEC sp_BulkInsert @FileName
SET @I = @I + 1
END

当我指定文件夹(不创建存储过程或动态@variable)时,我已经确认步骤 1-3 可以工作,但是存储 @PathFolder 似乎是问题所在。例如,我想从 C:\获取所有 .csv 文件,并且通过循环的每个 @FileName 将遍历表 Files 中包含的文件名,列 FileName。

我想要做的是能够执行以下代码,以便我可以获取指定文件夹中的所有 .csv 文件并成功将它们批量插入到我的数据库中:
EXEC sp_ResultsDump 'c:\'

这样做的原因是因为文件夹路径以后可能会发生变化,我希望用户能够指定它。

我相信“SELECT @FileName = @PathFolder+@FileName”是不正确的,我尝试了各种引号和+的组合。步骤 1 和 3 似乎都存在@PathFolder 问题。

我想我只是需要有关 while 循环的帮助,因为我认为如果我的 while 循环是正确的,这应该很好。

有什么建议?某处简单的语法错误?提前致谢。

最佳答案

我认为您的问题在于以下 SET命令

SET @PathExec = "dir '"+@PathFolder+"'.csv /B"

它似乎混合了双引号和单引号。试试改成这个
SET @PathExec = 'dir "' + @PathFolder + '.csv" /B'

关于tsql - T-SQL : Creating Stored Procedure that gets Path Folder and inserts into File Path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3566265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com