如何完全用SQL语句,将文件存到数据库

 我来答
哎呀……18a91a6
2016-06-24 · TA获得超过4.2万个赞
知道大有可为答主
回答量:7246
采纳率:76%
帮助的人:3197万
展开全部

SQL Server 2005:

通过OPENROWSET和bcp:

 

---示例1:
 -- SQL Server import image - SQL Server export image-- Extract image SQL Server - SQL Server export binary data
USE AdventureWorks;
GO
  
-- Create image warehouse for importing image into sql database
CREATE TABLE dbo.PhotoLibrary (
  PhotoLibraryID INT IDENTITY ( 1 , 1 ) PRIMARY KEY,
  ImageName        VARCHAR(100),
  Photo            VARBINARY(MAX))
GO
  
-- SQL Server import image - sql storing images database sql server
INSERT INTO dbo.PhotoLibrary
([ImageName])
VALUES     ('MadisonAVE.JPG')
UPDATE dbo.PhotoLibrary
SET    Photo = (SELECT *
FROM OPENROWSET(BULK 'e:\image\photo\MadisonAVE.JPG',   --源文件地址
SINGLE_BLOB) AS x)
WHERE  [ImageName] = 'MadisonAVE.JPG'
GO
  
-- Check table population
SELECT *
FROM   dbo.PhotoLibrary
GO
  
-- SQL Server export image
DECLARE  @Command NVARCHAR(4000)
  
-- Keep the command on ONE LINE - SINGLE LINE!!! - broken here for presentation
SET @Command = 'bcp "SELECT Photo FROM AdventureWorks.dbo.PhotoLibrary"
                   queryout "e:\image\photo\expMadisonAVE.jpg" -T -n -SPROD\SQL2005'
PRINT @Command -- debugging
EXEC xp_cmdshell @Command
GO
   

 
--- 示例2:
------------- T-SQL Export all images in table to file system folder
--导出所有的图象到文件
-- Source table: Production.ProductPhoto  - Destination: K:\data\images\productphoto\
--来源表 Production.ProductPhoto 目标:K:\data\images\productphoto\
------------
  
USE AdventureWorks2008;
GO
  
DECLARE  @Command       VARCHAR(4000),
         @PhotoID       INT,
         @ImageFileName VARCHAR(128)
DECLARE curPhotoImage CURSOR FOR -- Cursor for each image in table
SELECT ProductPhotoID,
       LargePhotoFileName
FROM   Production.ProductPhoto
WHERE  LargePhotoFileName != 'no_image_available_large.gif'
OPEN curPhotoImage
FETCH NEXT FROM curPhotoImage
INTO @PhotoID,
     @ImageFileName
WHILE (@@FETCH_STATUS = 0) -- Cursor loop 
BEGIN
  
-- Keep the bcp command on ONE LINE - SINGLE LINE!!! - broken up for presentation
SET @Command = 'bcp "SELECT LargePhoto FROM
    AdventureWorks2008.Production.ProductPhoto WHERE ProductPhotoID = ' +
convert(VARCHAR,@PhotoID) + '" queryout "K:\data\images\productphoto\' +
    @ImageFileName + '" -T -n -SHPESTAR'
PRINT @Command – debugging 
  
/* bcp "SELECT LargePhoto FROM AdventureWorks2008.Production.ProductPhoto
WHERE ProductPhotoID = 69" queryout
"K:\data\images\productphoto\racer02_black_f_large.gif" -T -n -SHPESTAR
*/
  
EXEC xp_cmdshell @Command     -- Carry out image export to file from db table
FETCH NEXT FROM curPhotoImage
INTO @PhotoID,
         @ImageFileName
END -- cursor loop
CLOSE curPhotoImage
DEALLOCATE curPhotoImage
  
/*output
NULL
Starting copy...
NULL
1 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total     : 16     Average : (62.50 rows per sec.)
NULL
.....
*/
  
------------
 
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式