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

我怎样才能轻松地插入到一个varbinary(MAX)字段blob?

为了参数的缘故:

假设我要插入的东西是:c:\ picture.png表是mytable的列是mypictureblob和地方recid = 1

我一直在Google上search一段时间,我找不到一个简单的解决scheme

谢谢!

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

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

使用大型值types

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

MSDN有一篇文章使用大值types ,试图解释如何导入工作,但它可以有点混乱,因为它一起做2件事情。 所以这里有一个简化的版本,分成两部分。 假设简单的表格:

 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) 

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

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

其余的只是把它插入到更多的列,你的表可能会或可能没有。 如果你命名结果odselectFOO,那么你可以使用SELECT Foo.BulkColumn和那个常量在表中的其他字段的屁股。

可以变得更棘手的问题是如何将数据导出到文件中,以便检查是否还可以。 如果你在cmd行运行:

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

它会开始抱怨4个额外的“参数”,并会给出令人误解的默认值(这将导致更改文件)。 你可以接受第一个,将第二个设置为0,然后确定第三个和第四个,或者是明确的:

 Enter the file storage type of field Data [varbinary(max)]: Enter prefix-length of field Data [8]: 0 Enter length of field Data [0]: Enter field terminator [none]: 

然后它会问:

 Do you want to save this format information in a file? [Y/n] y Host filename [bcp.fmt]: C:\Test\bcp_2.fmt 

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

有两种方法可以用TSQLselect一个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中所述 。

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

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

以hexforms(Management Studio)在pipe理应用程序中查看它。

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

你需要从mgmt工作室做到吗? 以下是我们如何从cmd行执行的操作:

“C:\ Program Files \ Microsoft SQL Server \ MSSQL \ Binn \ TEXTCOPY.exe”/ S <Server> / D <DataBase> / mytable / C mypictureblob / F“C:\ picture.png”/ W“其中RecId =“/我

好的…这让我觉得太长了 sql-management studio工具只是没有达到这样的简单的事情(我以前注意到,在寻找在哪里设置查询超时,并在4个不同的位置完成)

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

感谢您的input!