Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengekspor kolom gambar ke file pdf di server sql?

Saya menjawab pertanyaan ini karena saya menemukan cara untuk melakukannya lebih cepat.

Menggunakan utilitas bcp (program salin massal) dari baris perintah mempertahankan format file asli dan sangat cepat. File output dapat ditulis ke direktori lokal juga. Selain itu, format file dapat disesuaikan jika diperlukan.

Sunting:Menambahkan versi jawaban yang lebih rinci dengan kode yang saya gunakan.

1) Tetapkan izin yang diperlukan untuk menjalankan xp_cmdshell .

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

2) Ekspor file format untuk tabel menggunakan bcp

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

Ganti -T dengan -S servername -d databasename -U username -P password jika Anda tidak terhubung ke database menggunakan keamanan terintegrasi.

3) Setelah berhasil mengekspor file format, edit untuk menghapus semua kolom lain kecuali image atau varbinary kolom.

File format awalnya terlihat seperti ini.

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                     ""

Saya mengedit file seperti di bawah ini.

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

4) Kemudian saya harus mengulang baris dalam tabel untuk mengekstrak kolom gambar di setiap baris sebagai file. Saya menggunakan temp table untuk tujuan ini.

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

Langkah-langkah yang dijelaskan di atas, dapat digunakan untuk mengekstrak semua jenis file gambar/varbinary (disimpan sebagai pdf, docx, dll.) dari database.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tipe Data Teks SQL Server Maxlength =65.535?

  2. Instal Azure Data Studio di Ubuntu 18.04

  3. Cara Menginstal SQL Server di Mac dengan VirtualBox

  4. Apa yang terjadi pada transaksi yang tidak terikat ketika koneksi ditutup?

  5. Periksa Jenis Parameter Fungsi Partisi di SQL Server (T-SQL)