如何使用 SQLCMD 从本地文件插入二进制数据?

发布于 2024-09-02 02:10:20 字数 471 浏览 1 评论 0原文

我需要将文件中的二进制数据插入 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')??? )

,即数据是从本地文件中获取的。

我该怎么做?

I need to insert binary data from a file into a varbinary(max) column in SQL Server as a part of my deployment script.

The file is on the local machine, SQL Server is on the remote.

Here is the data table definition

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

I need something like this pseudo-command

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

i.e. data is taken from a local file.

How can I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

花开雨落又逢春i 2024-09-09 02:10:20

您绝对可以通过使用指向文件路径的 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

Absolutely you can insert and update binary data into a VARBINARY(MAX) field with sqlcmd by using OPENROWSET() pointing to path of file. Do note the file path cannot be dynamically concatenated or passed as a parameter but hard coded as is.

T-SQL (save as .sql script)

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 (command line)

sqlcmd -S myServer\instanceName -i C:\Path\To\myScript.sql
池木 2024-09-09 02:10:20

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

Google 'SQL BULK INSERT' that can get you at least some insertion from files, though it is meant for multiple rows.

无法回应 2024-09-09 02:10:20

无论如何,仅使用 SQLCMD 是不可能实现这一点的。

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

By all means this is not possible with SQLCMD alone.

A more powerful deployment tool is needed here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文