【问题标题】:How do I INSERT binary data from a local file with SQLCMD?如何使用 SQLCMD 从本地文件插入二进制数据?
【发布时间】:2010-05-21 09:52:08
【问题描述】:

作为我的部署脚本的一部分,我需要将文件中的二进制数据插入到 SQL Server 中的 varbinary(max) 列中。

文件在本地机器上,SQL Server 在远程机器上。

这里是数据表定义

CREATE TABLE [dbo].[Config] (
    [ID]   INT            IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (50)  NOT NULL,
    [Cfg]  VARBINARY(MAX) NOT NULL
);

我需要类似这个伪命令的东西

INSERT INTO Config(ID, Name, Cfg) VALUES (0, 'Default', ????('Default.cfg')??? )

即数据取自本地文件。

我该怎么做?

【问题讨论】:

  • 无论你做什么,你几乎肯定必须将文件复制到服务器,或者通过网络共享从客户端计算机公开它。基本上,您通过 SQLCMD 输入的任何内容(特别是“GO”命令除外)都会作为文本块发送到服务器,并在那里执行。

标签: sql-server sqlcmd


【解决方案1】:

您绝对可以使用指向文件路径的OPENROWSET() 使用sqlcmd 将二进制数据插入和更新到VARBINARY(MAX) 字段中。请注意,文件路径不能动态连接或作为参数传递,而是按原样硬编码。

T-SQL (另存为 .sql 脚本)

USE mydatabase;
GO

INSERT INTO Config ([ID], [Name], [Cfg]) VALUES (0, 'Default', 
    (SELECT * FROM OPENROWSET(BULK N'C:\Path\To\Default.cfg', SINGLE_BLOB) AS CFG_FILE));

UPDATE Config SET [Cfg] =
    (SELECT * FROM OPENROWSET(BULK N'C:\Path\To\Default.cfg', SINGLE_BLOB) AS CFG_FILE)
WHERE ID = 0;
GO

sqlcmd (命令行)

sqlcmd -S myServer\instanceName -i C:\Path\To\myScript.sql

【讨论】:

  • 很好奇,为什么投反对票?这已经在 SQL Server 2017 for Linux 上进行了测试。
【解决方案2】:

Google 'SQL BULK INSERT' 至少可以让您从文件中插入一些内容,尽管它适用于多行。

【讨论】:

    【解决方案3】:

    无论如何,单独使用 SQLCMD 是不可能的。

    这里需要一个更强大的部署工具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 2012-07-01
      相关资源
      最近更新 更多