【问题标题】:How to insert xml file into xml field using bcp?如何使用 bcp 将 xml 文件插入 xml 字段?
【发布时间】:2016-01-26 17:21:56
【问题描述】:

我有一张桌子:

USE [testdb]
GO

CREATE TABLE [dbo].[a](
    [n] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
    [x] [xml] NULL)
GO

如何从客户端将 xml 文件插入到字段 x 中? MSDN Example 不适合我。

    INSERT INTO T(XmlCol)
SELECT * FROM OPENROWSET(
   BULK 'c:\SampleFolder\SampleData3.txt',
   SINGLE_BLOB) AS x;

我不是此服务器的管理员。我只有访问数据库的权限。我无法将文件放在服务器上的目录中。我可以使用 BCP 和其他工具访问数据库

XML 文件非常大(> 50 MB),因此它不会在查询 SSMS 中将文件文本作为常量插入

【问题讨论】:

  • 那么,问题是如何使用 BCP 实用程序在表的 xml 列中插入 XML 值?
  • 请解释一下,“我无法访问磁盘服务器”“XML文件非常大”...你有一个文件但你不能访问它?请详细说明。在您的问题中提供更多背景信息(单击问题下方的edit 链接并提供更多背景信息)。
  • 我不是这台服务器的管理员。我只有访问数据库的权限。我无法将文件放在服务器上的目录中。我可以使用 BCP 和其他工具访问数据库
  • 当然,但是bcp 实用程序在 Microsoft SQL Server 实例和用户指定格式的数据文件之间批量复制数据。(来自BCP utility)。如果要使用 BCP,XML 必须在文件中。您的文件将位于何处?也许您正在寻找错误的工具。您希望在什么环境中存储 XML 文件:.NET 程序、Java 程序、网页……还是您的环境真的是 SQL Server?
  • 当然,我可以这样写:Using cnn As New SqlConnection(_cnnString) cnn.Open() Dim com As New SqlCommand("insert into dbo.a(x) values (@x)", cnn) With {.CommandType = CommandType.Text} com.Parameters.Add("@x", SqlDbType.NVarChar, -1) com.Parameters("@x").Direction = ParameterDirection.Input com.Parameters("@x").Value = IO.File.ReadAllText(_Path) com.ExecuteNonQuery() End Using,但我需要一个标准工具来做同样的事情。也许不是 bcp。

标签: sql-server xml tsql bcp


【解决方案1】:

鲜为人知的事实:bcp 实用程序支持 arbitrary strings 作为列和行分隔符。使用数据中不存在的分隔符构造一个文件,并相应地调用 bcp。

例如,您的列分隔符可以是-t \0Field\0。只是先检查数据。 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多