You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求SQL查询/存储过程:读取指定目录TXT文件并去重插入表

实现读取指定路径下TXT文件并插入SQL表(文件名去重)

以下是基于SQL Server的存储过程实现,可读取指定物理路径下所有.txt文件的文件名(不含扩展名)及内容,插入指定表时自动跳过已存在的文件名。

存储过程代码

CREATE PROCEDURE dbo.ImportTxtFilesToTable
    @FilePath NVARCHAR(500) -- 传入目标物理路径,格式示例:'D:\DataFiles\Txt\'
AS
BEGIN
    SET NOCOUNT ON;

    -- 临时表存储扫描到的文件列表
    CREATE TABLE #TempFileList (
        FullFileName NVARCHAR(255)
    );

    -- 若未启用xp_cmdshell,取消下方注释执行(需管理员权限,注意安全风险)
    -- EXEC sp_configure 'show advanced options', 1;
    -- RECONFIGURE;
    -- EXEC sp_configure 'xp_cmdshell', 1;
    -- RECONFIGURE;

    -- 调用系统命令获取指定路径下的所有txt文件名
    DECLARE @Cmd NVARCHAR(1000);
    SET @Cmd = 'DIR "' + @FilePath + '*.txt" /B';
    INSERT INTO #TempFileList
    EXEC xp_cmdshell @Cmd;

    -- 清理临时表中的无效数据(空行、非txt文件)
    DELETE FROM #TempFileList
    WHERE FullFileName IS NULL OR RIGHT(FullFileName, 4) <> '.txt';

    -- 遍历文件列表,读取内容并插入目标表
    DECLARE @CurrentFile NVARCHAR(255), @FileNameWithoutExt NVARCHAR(255), @FileContent NVARCHAR(MAX);
    DECLARE FileCursor CURSOR FOR SELECT FullFileName FROM #TempFileList;

    OPEN FileCursor;
    FETCH NEXT FROM FileCursor INTO @CurrentFile;

    WHILE @@FETCH_STATUS = 0
    BEGIN
        -- 提取不带扩展名的文件名
        SET @FileNameWithoutExt = LEFT(@CurrentFile, CHARINDEX('.', @CurrentFile) - 1);

        -- 检查目标表中是否已存在该文件名,不存在则执行插入
        IF NOT EXISTS (SELECT 1 FROM dbo.TargetTxtTable WHERE File_Name = @FileNameWithoutExt)
        BEGIN
            -- 读取文件内容
            DECLARE @ReadContentCmd NVARCHAR(1000);
            SET @ReadContentCmd = 'SELECT BulkColumn FROM OPENROWSET(BULK ''' + @FilePath + @CurrentFile + ''', SINGLE_NCLOB) AS FileContent';
            EXEC sp_executesql @ReadContentCmd, N'@Content NVARCHAR(MAX) OUTPUT', @FileContent OUTPUT;

            -- 插入目标表
            INSERT INTO dbo.TargetTxtTable (File_Name, File_Content)
            VALUES (@FileNameWithoutExt, @FileContent);
        END

        FETCH NEXT FROM FileCursor INTO @CurrentFile;
    END

    -- 清理资源
    CLOSE FileCursor;
    DEALLOCATE FileCursor;
    DROP TABLE #TempFileList;

    -- 可选:用完后禁用xp_cmdshell
    -- EXEC sp_configure 'xp_cmdshell', 0;
    -- RECONFIGURE;
    -- EXEC sp_configure 'show advanced options', 0;
    -- RECONFIGURE;
END
GO

关键说明

  • 目标表替换:将代码中的dbo.TargetTxtTable替换为你的实际目标表名,表结构需符合要求(Id为自增主键,File_Name存储无扩展名文件名,File_Content存储文本内容)。
  • 权限要求:SQL Server服务运行账号必须拥有指定物理路径的读取权限;执行存储过程的账号需具备xp_cmdshell和OPENROWSET的执行权限。
  • 去重逻辑:通过IF NOT EXISTS判断目标表中是否已存在同名记录,避免重复插入。
  • 安全提示:xp_cmdshell属于高级功能,启用前需评估安全风险,用完后可选择禁用。

使用示例

假设指定路径D:\DataFiles\Txt\下有文件:sales_2024.txt、user_info.txt,调用存储过程的命令为:

EXEC dbo.ImportTxtFilesToTable @FilePath = 'D:\DataFiles\Txt\';

执行后目标表数据示例:

IdFile_NameFile_Content
1sales_20242024年Q1销售额:120万...
2user_info系统用户:张三、李四...

内容的提问来源于stack exchange,提问作者sunil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 21:30:04