
如何完全用SQL语句,将文件存到数据库
展开全部
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
.....
*/
------------
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询