【问题标题】:Stored Procedure to Open and Read a text file打开和读取文本文件的存储过程
【发布时间】:2011-05-24 10:11:53
【问题描述】:

我正在寻找一个存储过程代码,它可以打开一个文本文件,读取几千行,然后将代码添加到数据库中的一个表中。有没有一种简单的方法可以在 T-SQL 中实现这一点?

【问题讨论】:

    标签: sql sql-server stored-procedures stored-functions


    【解决方案1】:

    我建议使用 SSIS。它旨在执行此类操作(特别是如果您需要定期执行此操作)。

    Here is a good link 读取文本文件并插入数据库。

    【讨论】:

    • 很好的答案,为此使用普通的 TSQL 存储过程肯定不是正确的方法。
    【解决方案2】:

    如果文件已准备好“按原样”加载(无需数据转换或复杂映射),您可以使用批量插入命令:

    CREATE PROC dbo.uspImportTextFile

    AS

    BULK INSERT Tablename FROM 'C:\ImportFile.txt' WITH ( FIELDTERMINATOR ='|', FIRSTROW = 2 )

    http://msdn.microsoft.com/en-us/library/ms188365.aspx

    【讨论】:

    • 好的,这非常有用。第一行会有字段名称?有没有办法使用批量复制命令保存数据。我一直在尝试在存储过程中使用 sqlcmd 和 bcp ,但没有成功写入文件。与 .net clr 解决方案相比,它似乎太复杂了。但是,与 .net CLR 和 FileStream 函数相比,野外的公司似乎更信任 SPROCS 和 BCP。也许是因为部署问题。感谢您提供有关 Sql Server 的信息。
    • bcp 实用程序用于命令行(不适用于查询)。但是,您可以使用 xp_cmdshell 从 T-SQL 运行 bcp。见这里:sqlteam.com/article/…
    • 另外,请记住,CLR 存储过程在 2005/2008 中受支持,因此您有 StreamWriter 选项。它只需要启用 CLR 并信任程序集(稍微放宽安全设置)。
    【解决方案3】:

    将许多记录插入表中最有效的方法是使用BULK INSERT(我相信这是BCP Utility 使用的,所以应该一样快)。

    BULK INSERT 针对插入大量数据进行了优化,适用于简单的INSERT 语句根本无法执行的情况。

    如果BULK INSERT 不是您所追求的,那么您可能需要查看以下文章以获得更直接的技术:

    文章中链接的是一个存储过程uftReadFileAsTable,它看起来应该足够通用,可以实现您所追求的目标。

    如果不是,那么您至少可以使用存储过程作为如何在 SQL 中读取文件的示例(它使用 OLE / Scripting.FileSystemObject

    【讨论】:

    • 可能值得补充的是,OLE procs (sp_OA*) 默认情况下是禁用的,因为它们可以打开许多额外的功能,其中一些可能是不可取的,因此应该被视为安全问题。
    【解决方案4】:

    为什么不使用 try 用户函数? 这样您就可以使用 .NET 访问和处理您的文件。

    看看这个post

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多