如何使用sql server management studio将blob插入数据库

时间:2009-10-29 13:12:38

标签: sql sql-server sql-server-2005 blob

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

举个例子:

我要插入的东西是:c:\ picture.png
桌子是mytable
专栏是mypictureblob
这个地方是recid = 1

6 个答案:

答案 0 :(得分:64)

您可以使用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

请查看以下文档以获得一个好的示例/演练

Working With Large Value Types

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

答案 1 :(得分:14)

MSDN有一篇文章Working With Large Value Types,  试图解释导入部分如何工作,但它可能会有点混乱,因为它同时做两件事。

这里我提供一个简化版本,分为两部分。假设以下简单表:

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

它将显示,结果看起来像一个名为BulkColumn的列的表。这就是为什么你可以在INSERT中使用它,如:

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

其余的只是将它装入一个包含更多列的插页中,您的表可能有也可能没有。如果您为select FOO的结果命名,那么您可以在表格中的其他字段的常量之后使用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,然后设置第三个和第四个,或者显式:

  

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

然后会问:

  

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

下次你必须运行它时添加-f C:\Test\bcp_2.fmt它会停止抱怨:-) 节省了大量时间和悲伤。

答案 2 :(得分:6)

使用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来插入它。

您也可以使用第二个版本进行更新,如How To Update A BLOB In SQL SERVER Using TSQL中所述。

答案 3 :(得分:2)

但是,您只需在SQL Server计算机上从磁盘读取文件:

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

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

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

答案 4 :(得分:1)

你需要从mgmt工作室做吗?以下是我们从cmd行开始的方式:

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

答案 5 :(得分:0)

好的......这让我花了太长时间。 sql-management studio工具不仅仅是这样的简单事情(我之前在寻找设置查询超时的位置时注意到了这一点,而且它是在4个不同的位置完成的)

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

感谢您的投入!