【问题标题】:Read content of a text file as SELECT result (SQL Server)读取文本文件的内容作为 SELECT 结果(SQL Server)
【发布时间】:2020-09-10 13:01:13
【问题描述】:

我需要一种方法来读取 HTML 文件的内容并将其作为 SQL 服务器查询中的列返回。

为了设置场景,我正在处理一个查询,该查询收集从 ERP 系统导出产品并将其导入 eBay 所需的所有数据,但我需要将产品描述存储在 HTML 文件中。

在查询的一部分,我需要读取每个产品 SKU 的 HTML 文件的内容

下面的 SQL 不正确,但应该让我知道我正在尝试做什么:

SELECT '<HTML FILE CONTENTS>' as Description

文件名将与表中的产品 SKU 相同,并且所有文件都在同一个文件夹中,因此我需要将其污染到文件路径中。

这可能吗?

【问题讨论】:

    标签: sql sql-server data-transform


    【解决方案1】:

    如果有人感兴趣,我已经设法使用以下方法做到这一点:)

    CREATE TABLE #files(filename VARCHAR(MAX))
    CREATE TABLE #content1(content VARCHAR(MAX))
    CREATE TABLE #content2(content VARCHAR(MAX))
    CREATE TABLE #descriptions (
        SKU VARCHAR(MAX),
        Description VARCHAR(MAX)
    )
    
    
    INSERT INTO #files 
    EXEC xp_cmdshell 'dir /B "D:\ebay\"'
    DELETE FROM #files WHERE filename is NULL
    
    DECLARE @filename varchar(MAX)
    DECLARE @command VARCHAR(255)
    
    
    WHILE (SELECT count(*) FROM #files) > 0
    BEGIN
        DECLARE @description varchar(MAX)
    
        SELECT TOP 1 @filename = filename FROM #files
    
        SET @command = 'type D:\ebay\'+@filename+'"'
        INSERT INTO #content1
        EXEC xp_cmdshell @command
        
        --Merges multiple rows into single row
        INSERT INTO #content2
        SELECT STUFF((
            SELECT CHAR(13) + content
            FROM #content1
            FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'), 1, 1, '')
    
    
        SELECT TOP 1 @description = content FROM #content2
        
        INSERT INTO #descriptions (SKU, Description) VALUES (REPLACE(@filename, '.html', ''), @description) 
    
        DELETE FROM #files WHERE filename = @filename
        DELETE FROM #content1
        DELETE FROM #content2
    END
    

    【讨论】:

      【解决方案2】:

      我认为这在 TSQL 中是不可能的。检索数据后如何处理数据?如果您使用的是程序,我会将数据加载到对象列表中,然后遍历对象并分别从 HTML 文件中读取描述。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-12
        • 2021-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-18
        相关资源
        最近更新 更多