Toa*_*oad 48 sql sql-server blob sql-server-2005
如何轻松地将blob插入varbinary(MAX)字段?
为了论证:
假设我要插入的东西是:c:\ picture.png表是mytable,列是mypictureblob,地方是recid = 1
我一直在谷歌搜索一段时间,我找不到一个简单的解决方案
谢谢!
Joh*_*som 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
Run Code Online (Sandbox Code Playgroud)
请查看以下文档以获取一个好的示例/演练
请注意,在这种情况下,文件路径是相对于目标SQL服务器而不是运行此命令的客户端.
ZXX*_*ZXX 15
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]
Run Code Online (Sandbox Code Playgroud)
如果您运行(在SSMS中):
SELECT * FROM OPENROWSET (BULK 'C:\Test\TestPic1.jpg', SINGLE_BLOB) AS X
Run Code Online (Sandbox Code Playgroud)
它将显示,结果看起来像一个名为一列的表BulkColumn.这就是为什么你可以在INSERT中使用它,如:
INSERT [Thumbnail] ( Data )
SELECT * FROM OPENROWSET (BULK 'C:\Test\TestPic1.jpg', SINGLE_BLOB) AS X
Run Code Online (Sandbox Code Playgroud)
其余的只是将它装入一个包含更多列的插页中,您的表可能有也可能没有.如果您将结果命名为,select FOO那么您可以在表中的其他字段之后使用SELECT Foo.BulkColumn和as之后的常量.
可能变得更棘手的部分是如何将该数据导回到文件中,以便您可以检查它是否仍然正常.如果你在cmd行上运行它:
bcp "select Data from B2B.dbo.Thumbnail where Id=1"
queryout D:\T\TestImage1_out2.dds -T -L 1
Run Code Online (Sandbox Code Playgroud)
它将开始抱怨4个额外的"参数",并会产生误导性的默认值(这将导致更改的文件).你可以接受第一个,将第二个设置为0,然后设置第三个和第四个,或者显式:
输入字段Data [varbinary(max)]的文件存储类型:
输入字段的前缀长度Data [8]:0
输入字段长度Data [0]:
输入字段终止符[none]:
然后会问:
是否要将此格式信息保存在文件中?[是/
否] y 主机文件名[bcp.fmt]:C:\ Test\bcp_2.fmt
下次你必须运行它添加-f C:\Test\bcp_2.fmt它会停止抱怨:-)节省大量的时间和悲伤.
使用TSQL选择BLOB有两种方法:
SELECT * FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a
Run Code Online (Sandbox Code Playgroud)
以及:
SELECT BulkColumn FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a
Run Code Online (Sandbox Code Playgroud)
请注意FROM子句后的相关名,这是必需的.
然后你可以通过执行INSERT SELECT来INSERT.
您还可以使用第二个版本进行更新,如我在如何使用TSQL更新SQL SERVER中的BLOB中所述.
| 归档时间: |
|
| 查看次数: |
123474 次 |
| 最近记录: |