2009-09-02 19 views
10

मैं डेटाबेस से कनेक्ट करने के लिए माइक्रोसॉफ्ट एसक्यूएल सर्वर प्रबंधन स्टूडियो का उपयोग कर रहा हूं। इसमें मेरे पास एक टेबल है, जिसमें से एक कॉलम एक छवि कॉलम है जिसमें फ़ाइल डेटा है। एक और कॉलम एक स्ट्रिंग है जिसमें फाइल का नाम होता है।फ़ाइल फ़ील्ड को फ़ाइल करने के लिए कैसे निर्यात करें?

क्या कोई तरीका है कि मैं कुछ एसक्यूएल स्क्रिप्ट लिख सकता हूं जो मुझे रिकॉर्ड का चयन करने और फ़ाइल को इस डेटा को लिखने की अनुमति देगा? या यदि यह संभव नहीं है, तो इसे प्राप्त करने का एक आसान तरीका क्या है?

मैं इस संबंधित सवाल देखा है, लेकिन यह काफी एक ही प्रतीत नहीं होता: Save image column to file in sql-server 2000

उत्तर

25
-- Write all database images (jpg) to file. 
--------- --------- --------- --------- --------- --------- --------- 
DECLARE CURSOR_ProductIds CURSOR FOR (SELECT ImgImagesId FROM ImgProductSample) 

DECLARE @ProductId INT; 

OPEN CURSOR_ProductIds 

FETCH NEXT FROM CURSOR_ProductIds INTO @ProductId 
WHILE (@@FETCH_STATUS <> -1) 
BEGIN 
    DECLARE @ImageData varbinary(max); 
    SELECT @ImageData = (SELECT convert(varbinary(max), ImageData, 1) FROM ProductImages WHERE Id = @ProductId); 

    DECLARE @Path nvarchar(1024); 
    SELECT @Path = 'C:\MyImages\Output'; 

    DECLARE @Filename NVARCHAR(1024); 
    SELECT @Filename = (SELECT ImageFilename FROM ProductImages WHERE id = @ProductId); 

    DECLARE @FullPathToOutputFile NVARCHAR(2048); 
    SELECT @FullPathToOutputFile = @Path + '\' + @Filename; 

    DECLARE @ObjectToken INT 
    EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT; 
    EXEC sp_OASetProperty @ObjectToken, 'Type', 1; 
    EXEC sp_OAMethod @ObjectToken, 'Open'; 
    EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @ImageData; 
    EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @FullPathToOutputFile, 2; 
    EXEC sp_OAMethod @ObjectToken, 'Close'; 
    EXEC sp_OADestroy @ObjectToken; 

    FETCH NEXT FROM CURSOR_ProductIds INTO @ProductId 
END 
CLOSE CURSOR_ProductIds 
DEALLOCATE CURSOR_ProductIds 

-- Make sure the following statement is executed to enable file IO 
-- From http://msdn.microsoft.com/en-us/library/ms191188.aspx 
--------- --------- --------- --------- --------- --------- --------- 
sp_configure 'show advanced options', 1; 
GO 
RECONFIGURE; 
GO 
sp_configure 'Ole Automation Procedures', 1; 
GO 
RECONFIGURE; 
GO 
+0

संदेश 8152, स्तर 16, राज्य 10, रेखा 7 स्ट्रिंग या बाइनरी डेटा काटा जाएगा। –

2
-- Write database image (jpg) to file 
-- http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=101754 
--------- --------- --------- --------- --------- --------- --------- 
DECLARE @ImageData varbinary(max); 
SELECT @ImageData = (SELECT convert(varbinary(max), ImageData, 1) FROM ProductImages WHERE Id = 1); 

DECLARE @Path nvarchar(1024); 
SELECT @Path = 'C:\MyImages\Output'; 

DECLARE @Filename NVARCHAR(1024); 
SELECT @Filename = (SELECT ImageFilename FROM ProductImages WHERE id = 1); 

DECLARE @FullPathToOutputFile NVARCHAR(2048); 
SELECT @FullPathToOutputFile = @Path + '\' + @Filename; 

DECLARE @ObjectToken INT 
EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT; 
EXEC sp_OASetProperty @ObjectToken, 'Type', 1; 
EXEC sp_OAMethod @ObjectToken, 'Open'; 
EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @ImageData; 
EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @FullPathToOutputFile, 2; 
EXEC sp_OAMethod @ObjectToken, 'Close'; 
EXEC sp_OADestroy @ObjectToken; 

-- Make sure the following statement is executed to enable file IO 
-- From http://msdn.microsoft.com/en-us/library/ms191188.aspx 
--------- --------- --------- --------- --------- --------- --------- 
sp_configure 'show advanced options', 1; 
GO 
RECONFIGURE; 
GO 
sp_configure 'Ole Automation Procedures', 1; 
GO 
RECONFIGURE; 
GO 

पुनश्च - 'T-SQL का उपयोग कर एसक्यूएल सर्वर में पढ़ना और लेखन फ़ाइलें' लेख के लिए लिंक था उपयोगी लेकिन मैं कोड कोड का टुकड़ा पाने के बाद इसे एक अवैध छवि फ़ाइल का उत्पादन किया।

+0

@mathijusuitmegan मैं इस मुद्दे का सामना करना पड़ रहा हूँ: संदेश 8152, स्तर 16, राज्य 10, लाइन 7 स्ट्रिंग या बाइनरी डेटा काटा जाएगा। –

5

mkader से codeproject पर:

Declare @sql varchar(500) 
SET @sql = 'bcp DBName.dbo.tblTableName format nul -T -n -f C:\testblob.fmt -S ' + @@SERVERNAME 
select @sql 
EXEC master.dbo.xp_CmdShell @sql 

मेरे प्रारूप फ़ाइल इस तरह देखा:

10.0 
12 
1  SQLINT    0  4  "" 1  my_tablecol_id         "" 
2  SQLINT    1  4  "" 2  my_tablecol0         "" 
3  SQLCHAR    2  256  "" 3  my_tablecol1        SQL_Latin1_General_CP1_CI_AS 
4  SQLCHAR    2  256  "" 4  my_tablecol2        SQL_Latin1_General_CP1_CI_AS 
5  SQLCHAR    2  256  "" 5  my_tablecol3       SQL_Latin1_General_CP1_CI_AS 
6  SQLCHAR    2  2048 "" 6  my_tablecol4        SQL_Latin1_General_CP1_CI_AS 
7  SQLIMAGE   4  0  "" 7  my_imagecol          "" 
8  SQLCHAR    2  2048 "" 8  my_tablecol6       SQL_Latin1_General_CP1_CI_AS 
9  SQLINT    1  4  "" 9  my_tablecol7          "" 
10  SQLINT    1  4  "" 10 my_tablecol8         "" 
11  SQLINT    1  4  "" 11 my_tablecol9        "" 
12  SQLBIT    1  1  "" 12 my_tablecol10        "" 

मैं तो संपादित

EXEC sp_configure 'show advanced options', 1; 
GO 
RECONFIGURE; 
GO 
EXEC sp_configure 'xp_cmdshell',1 
GO 
RECONFIGURE; 
GO 

फिर एक प्रारूप फ़ाइल डंप प्रारूप फ़ाइल की तरह:

10.0 
1 
1  SQLIMAGE   0  0  "" 1  my_imagecol          "" 

और फिर SSMS में इस एसक्यूएल भाग गया:

Declare @mynum int 
Declare @sql varchar(500) 
SET @mynum = 49 -- something meaningful only to me 
SET @sql = 'BCP "SELECT my_imagecol FROM DBName.dbo.tblTableName where [email protected]" QUERYOUT C:\myfilename.docx -T -fC:\testblob.fmt -S ' + @@SERVERNAME 
EXEC master.dbo.xp_CmdShell @sql 

यह वास्तव में अच्छी तरह से काम, छवि स्तंभ में डेटा के किसी भी प्रकार काम करता है।

+0

धन्यवाद! प्रारूप फ़ाइल वह थी जो मुझे यह काम करने के लिए आवश्यक थी। –

0

मुझे पता है कि यह 2 साल पुराना धागा से ऊपर है, अभी भी पोस्ट करना चाहता था, क्योंकि यह किसी की मदद कर सकता था। यदि हम किसी डेटाबेस तालिका से फ़ाइल में अन्य कॉलम (जिसमें प्रतीक शामिल हैं) के साथ छवियों को निर्यात करना चाहते हैं, ताकि उन्हें किसी अन्य SQL सर्वर में आयात किया जा सके, यह बहुत आसान है।

नीचे दिया गया कोड निर्दिष्ट डेटाबेस तालिका को पसंद के फ़ाइल पथ पर निर्यात करेगा।

Declare @sql varchar(500) 
SET @sql = 'bcp Your_db.Your_table out Your_File_Path(eg: C:\ImagesNames.Dat) -w -T -S ' + @@SERVERNAME 
EXEC @sql 

डब्ल्यू स्विच यूनिकोड प्रारूप डेटा फ़ाइल के लिए है और सीमांकक अगर हम एक परिसीमक निर्दिष्ट नहीं है डिफ़ॉल्ट टैब सीमांकक हो जाएगा। इस मामले में, डेटा फ़ाइल डेटा एक्सटेंशन के साथ सहेजी जाती है। शायद इसे अन्य प्रारूपों में भी बचाया जा सकता है, लेकिन मैंने इसका परीक्षण नहीं किया है, जबकि यह पूरी तरह से काम करता है।

https://msdn.microsoft.com/en-gb/library/ms188289(v=sql.110).aspx

तो आयात के लिए

:

BULK INSERT Your_db.Your_table 
    FROM 'Your_File_Path' 
with (DATAFILETYPE='widechar') 

यह निर्दिष्ट डेटाबेस तालिका में बहुत कुशलता से डेटा फ़ाइल आयात करता है।

-2
mathijsuitmegen द्वारा

अनुकूलित समाधान और यह मेरे लिए पूरी तरह से काम किया:

Code1

Code2

+0

मैं सुझाव दूंगा कि आप छवि के बजाय टेक्स्ट कॉपी करें। अन्यथा यह पढ़ने के लिए वास्तव में सुखद नहीं है। – Carol

संबंधित मुद्दे