Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एसक्यूएल सर्वर में एक पीडीएफ फाइल में एक छवि कॉलम निर्यात करना?

मैं इस प्रश्न का उत्तर दे रहा हूं क्योंकि मुझे इसे तेजी से करने का एक तरीका मिल गया है।

कमांड लाइन से bcp (बल्क कॉपी प्रोग्राम) उपयोगिता का उपयोग करना मूल फ़ाइल स्वरूप को सुरक्षित रखता है और बहुत तेज़ है। आउटपुट फ़ाइलों को स्थानीय निर्देशिका में भी लिखा जा सकता है। साथ ही, यदि आवश्यक हो तो फ़ाइल स्वरूपों को अनुकूलित किया जा सकता है।

संपादित करें:मेरे द्वारा उपयोग किए गए कोड के साथ उत्तर का अधिक विस्तृत संस्करण जोड़ना।

1) xp_cmdshell execute को निष्पादित करने के लिए आवश्यक अनुमतियां सेट करें ।

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

2) bcp . का उपयोग करके तालिका के लिए प्रारूप फ़ाइल निर्यात करें

bcp schemaname.tablename format nul -T -n -f format_file_tablename.fmt

बदलें -T -S servername -d databasename -U username -P password . के साथ यदि आप एकीकृत सुरक्षा का उपयोग करके डेटाबेस से कनेक्ट नहीं होते हैं।

3) प्रारूप फ़ाइल के सफल निर्यात के बाद, image . को छोड़कर अन्य सभी स्तंभों को हटाने के लिए इसे संपादित करें या varbinary कॉलम।

प्रारूप फ़ाइल शुरू में इस तरह दिखती थी।

11.0
17
1       SQLNCHAR            2       200     ""   1     Name                                 SQL_Latin1_General_CP1_CI_AS
2       SQLNCHAR            2       1000    ""   2     Description                          SQL_Latin1_General_CP1_CI_AS
3       SQLUNIQUEID         1       16      ""   3     GUID                                 ""
4       SQLBIT              1       1       ""   4     Enabled                              ""
5       SQLNCHAR            2       600     ""   5     ClassType                            SQL_Latin1_General_CP1_CI_AS
6       SQLINT              0       4       ""   6     PartitionID                          ""
7       SQLBIT              1       1       ""   7     Protected                            ""
8       SQLDATETIME         1       8       ""   8     LastModifiedTime                     ""
9       SQLINT              0       4       ""   9     LastModifiedByID                     ""
10      SQLINT              0       4       ""   10    ImageType                            ""
11      SQLBIT              1       1       ""   11    Template                             ""
12      SQLINT              0       4       ""   12    ObjectID                             ""
13      SQLBINARY           8       0       ""   13    Image     --column of interest                           ""
14      SQLINT              0       4       ""   14    ParentId                             ""
15      SQLNCHAR            2       600     ""   15    ParentClassType                      SQL_Latin1_General_CP1_CI_AS
16      SQLBIT              1       1       ""   16    IsPrimary                            ""
17      SQLDATETIME         1       8       ""   17    ImageCaptureDate                     ""

मैंने फ़ाइल को नीचे की तरह संपादित किया है।

11.0
1
1      SQLBINARY           0       0       ""   1    Image                                ""

4) फिर मुझे फ़ाइल के रूप में प्रत्येक पंक्ति में छवि कॉलम निकालने के लिए तालिका में पंक्तियों के माध्यम से लूप करना पड़ा। मैंने एक temp table का उपयोग किया है इस उद्देश्य के लिए।

IF OBJECT_ID('dbo.tmp_for_picture', 'U') IS NOT NULL
DROP TABLE tmp_for_picture
GO
select 
 row_number() over(order by parentid) as rownum 
,i.image as image_column
,i.parentid
,replace(p.name,',','') as picture_file_name
,i.name
into tmp_for_picture
from Images i 
join personnel p on p.ObjectID = i.ParentId
GO
declare @cnt int
declare @i int 
declare @filename varchar(512)
declare @extension varchar(20)
declare @sql varchar(4000)
set @cnt = (select count(*) from Images i join personnel p on p.ObjectID = i.ParentId)
set @i = 1
set @extension = '.jpeg' --or extract the extension from a column in the table if available

while @i <= @cnt 
begin
--print @i
set @filename = (select picture_file_name from tmp_for_picture where rownum = @i)
set @sql = 'bcp "select image_column from tmp_for_picture where rownum = '+str(@i)+'" queryout "F:\pictures\'[email protected][email protected]+'" -f formatfile.fmt -S servername -d databasename -T'
--print @sql
exec xp_cmdshell @sql
set @i = @i+1
end
GO

ऊपर वर्णित चरणों का उपयोग डेटाबेस से किसी भी प्रकार की छवि/varbinary फ़ाइलों (pdf, docx आदि के रूप में संग्रहीत) को निकालने के लिए किया जा सकता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SqlBulkCopy का उपयोग करके SQL सर्वर पर CSV फ़ाइल आयात करें

  2. SQL सर्वर में सांख्यिकी IO क्या है?

  3. एसक्यूएल आउटपुट क्लॉज के लिए कॉलम को सम्मिलित नहीं करने के लिए यह संभव है?

  4. कई कैस्केड पथ उत्पन्न करने वाले कैस्केडिंग हटाता है

  5. SQL में दो तिथियों के बीच पूर्ण महीनों की संख्या की गणना करना