【问题标题】:Insert text into TEXT column from a file从文件中将文本插入 TEXT 列
【发布时间】:2010-11-02 16:58:23
【问题描述】:

从文件中将文本插入Text 类型列 (text, ntext, varchar(max), nvarchar(max)) 的最简单方法是什么 - 最好只使用 SQL Server Management Studio。

说有一张桌子

textFileContent(id, textData)

想做的事

insert into textFileContent(textData)
values([data read from a file, complete file content])

另外,是否可以以类似的方式进行更新?例如

update textFileContent
set textData = [data read from a file,  complete file content]
where id = 1

【问题讨论】:

  • TEXT、NTEXT、IMAGE 自 SQL Server 2005 起已弃用 - 如果可能,您应该避免使用它们(尤其是在创建新内容时)。

标签: sql sql-server tsql sql-insert


【解决方案1】:

你可以使用 xp_cmdshell:

create table #mytable 
(
    id int IDENTITY(1,1) NOT NULL,
    result nvarchar(MAX) NULL
)

insert into #mytable (result)
exec xp_cmdshell 'type c:\somefile.txt' -- this may require cmd before it

这应该将文本转储到表中,其中硬返回表示新记录。

否则,如果您有 SQL Express,则只能使用 BCP 和 BULK INSERT。如果您首先创建表以生成格式文件,则 BCP 中有命令。请记住,如果是 Unicode,您的分隔符是两个字符 \n\0\r\0(或类似的东西)

否则,如果您有 SQL Standard 或更高版本,则可以使用 SSIS。您创建一个数据流,为输入文本文件放置一个图标,为目标表放置一个图标,然后单击播放。要使用 SQL 进行这项工作,您需要使用上面的 xp_cmdshell 之类的东西来调用它。就文本文件而言,SSIS 是您将使用 BCP 执行的操作的可视化。

【讨论】:

    【解决方案2】:

    答案在一定程度上取决于您的用例。我猜您需要在项目开始时加载数据......如果您需要将数据“提供”到 SQL 服务器,那么我会有不同的答案。

    以下是最简单的选择:

    • 重新格式化您的文本文件,使其成为 sql 语句。例如,如果您有一行文本要插入名为名称的表中,您可以将insert into names value(' 放在每行的开头,将') 放在末尾。然后将其复制并粘贴到管理器中并运行它。

    • 使用批量插入 (link)

    • 使用 SSIS/DTS (link)

    【讨论】:

    • 感谢 Hogan,所以假设我在服务器上有文件说 c:\testFile.txt 将完整内容上传到单行,我会这样做:“从 'c:\r781 批量插入 txtFileContent .txt'" ?
    • 在这种情况下,我个人只会修改文件并在管理器中运行它——我总是需要反复试验才能使批量插入工作。去做。首先复制您的表格并进行测试,直到它可以正常工作,然后才能获得金牌。
    • 我在使用 SSIS 和 XML 处理具有多个字段的超大文件方面取得了很多成功。
    • @Dr.齐姆:是的。在这种情况下,听起来他只有一个领域。我对用例有点困惑。耸耸肩。
    【解决方案3】:

    您可以使用 OPENROWSET 从文本文件中导入数据。但是,为此,您可能还必须定义一个格式文件。您可以找到更多帮助here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      • 2013-11-14
      • 2023-02-10
      • 2012-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多