如何使用SQL Server Management Studio将Blob插入数据库

如何轻松将Blob插入varbinary(MAX)字段?

举个例子:

我要插入的是:c:\ picture.png
桌子是我的桌子
列是mypictureblob
这个地方是Recid = 1

Toad asked 2020-02-13T23:00:00Z
6个解决方案
64 votes

您可以在SQL Server Management Studio中使用T-SQL插入varbinary(max)字段,尤其是使用OPENROWSET命令。

例如:

INSERT Production.ProductPhoto 
(
    ThumbnailPhoto, 
    ThumbnailPhotoFilePath, 
    LargePhoto, 
    LargePhotoFilePath
)
SELECT ThumbnailPhoto.*, null, null, N'tricycle_pink.gif'
FROM OPENROWSET 
    (BULK 'c:\images\tricycle.jpg', SINGLE_BLOB) ThumbnailPhoto

查看以下文档以获取良好的示例/演练

使用大值类型

请注意,在这种情况下,文件路径是相对于目标SQL Server的,而不是相对于运行此命令的客户端。

John Sansom answered 2020-02-13T23:00:38Z
15 votes

MSDN上有一篇文章《使用大值类型》,  它试图解释导入零件的工作方式,但是由于它同时执行两项操作,因此可能会造成一些混乱。

在这里,我提供了一个简化的版本,分为两部分。 假定下面的简单表:

CREATE TABLE [Thumbnail](
   [Id]        [int] IDENTITY(1,1) NOT NULL,
   [Data]      [varbinary](max) NULL
CONSTRAINT [PK_Thumbnail] PRIMARY KEY CLUSTERED 
(
[Id] ASC
) ) ON [PRIMARY]

如果您运行(在SSMS中):

SELECT * FROM OPENROWSET (BULK 'C:\Test\TestPic1.jpg', SINGLE_BLOB) AS X

它会显示结果看起来像一张表,其中有一列名为-f C:\Test\bcp_2.fmt。这就是为什么您可以像下面这样在INSERT中使用它的原因:

INSERT [Thumbnail] ( Data )
SELECT * FROM OPENROWSET (BULK 'C:\Test\TestPic1.jpg', SINGLE_BLOB) AS X

其余的只是将其放入具有更多列的插入物中,而表可能有也可能没有。 如果您命名该-f C:\Test\bcp_2.fmt的结果,则可以在表中其他字段的常量之后使用SELECT Foo.BulkColumnas

可能会更棘手的部分是如何将数据导出回文件,以便您可以检查数据是否仍然可以。 如果在cmd行上运行它:

bcp "select Data from B2B.dbo.Thumbnail where Id=1" 
queryout D:\T\TestImage1_out2.dds -T -L 1 

它会开始抱怨另外4个“参数”,并且会产生误导性的默认值(这将导致文件更改)。 您可以接受第一个,将第二个设置为0,然后分别设置第3个和第4个,或者明确地说:

输入字段数据[varbinary(max)]的文件存储类型:
输入字段数据[8]的前缀长度:0
输入字段数据[0]的长度:
输入字段终止符[无]:

然后它将询问:

您要将此格式信息保存在文件中吗? [Y / n] y
主机名[bcp.fmt]:C:\ Test \ bcp_2.fmt

下次您必须运行它时,请添加-f C:\Test\bcp_2.fmt,它将停止发出抱怨:-)节省大量时间和悲伤。

ZXX answered 2020-02-13T23:02:00Z
8 votes

使用TSQL选择BLOB有两种方法:

SELECT * FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a

以及:

SELECT BulkColumn FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a

请注意FROM子句后面的相关名称,这是必需的。

然后,您可以通过执行INSERT SELECT将此操作插入INSERT。

您也可以使用第二个版本执行UPDATE,如我在如何使用TSQL在SQL SERVER中更新BLOB中所述。

yoel halb answered 2020-02-13T23:02:38Z
2 votes

但是,您可以简单地从SQL Server计算机上的磁盘读取文件:

select * from openrowset (bulk 'c:\path\filename.ext',single_blob) a

以十六进制形式(Management Studio)在管理应用程序中查看它。

因此,例如,您可以将数据库备份到文件(本地在服务器上),然后通过上述语句将其下载到其他位置。

pbies answered 2020-02-13T23:03:06Z
1 votes

您需要在mgmt studio中进行吗? 这是我们从cmd行执行的方法:

“ C:\ Program Files \ Microsoft SQL Server \ MSSQL \ Binn \ TEXTCOPY.exe” / S <服务器> / D <数据库> / T mytable / C mypictureblob / F“ C:\ picture.png” / W“其中RecId =“ / I

cagreen answered 2020-02-13T23:03:31Z
0 votes

好的,这花了我太多时间。 sql-management studio工具不能满足这样的简单要求(我之前在寻找查询超时设置的地方已经注意到,它是在4个不同的位置完成的)

我下载了其他一些sql编辑器程序包(以我的情况为sql maestro)。 并且它包含一个blob编辑器,您可以在其中查看blob,并将新的blob加载到这些字段中。

感谢您的输入!

Toad answered 2020-02-13T23:04:00Z
translate from https://stackoverflow.com:/questions/1643627/how-to-insert-a-blob-into-a-database-using-sql-server-management-studio