Sql-Server-2014
將 .pdf 文件插入表格的游標
我需要根據其編號將文件夾中的所有 .pdf 文件插入表格中。
我可以獲得文件列表(我在一個文件夾中有所有 .pdf):
exec master.sys.Xp_dirtree 'The_Folder_where_PDFS_are',0,1
我可以將它插入一個表中:
CREATE TABLE PDFTest(NumExample integer,image_data VARBINARY(MAX)); DECLARE @NumExample integer SET @NumExample = 2456789 INSERT INTO PDFTest(NumExample ,image_data) SELECT @NumExample ,image_data FROM OPENROWSET(BULK N'C:\DBA\3937052016_Requisição.pdf',SINGLE_BLOB) AS ImageSource(image_data); Select * from PDFTest
但正如您所見,文件以數字 (
3937052016
) 命名。這個數字是另一個表的 ID,所以,如果 PDF 文件以 開頭123
,我需要將它插入到 ID123
中。我只是想要一個起點。我正在嘗試創建一個游標,循環遍歷所有文件,並使用 left() 或 substring() 函式來獲取數字,將其插入到變數中,然後進行比較,例如insert this pdf into table where left/substring(pdf_name)=id
.我需要像這樣的字元串:
Insert into tablex ( pdffield ) values ( 123_PdfFIle.pdf ( obviously using openrowset ) where left/substring(123_pdf to get the pdf's code )) = id`
我在正確的更新檔上?有沒有辦法用更少的努力做到這一點?
我創建了一個名為 c:\TestPdf 的目錄並創建了兩個 txt 文件,其中包含一些文本(您將使用您的 pdf 文件)
123456789.txt 987654321.txt
從您的範例中,我的假設是您希望將文件 123456789.txt 作為 ID 123 插入,並且您希望將文件 987654321.txt 作為 ID 987 插入。
這個動態 SQL 對我有用 - 您需要針對您的數據進行測試
set nocount on IF OBJECT_ID('dbo.PDFTest', 'U') IS NOT NULL DROP TABLE dbo.PDFTest; Create table PDFTest (NumExample integer,image_data VARBINARY(MAX)) DECLARE @FileTable TABLE (FileName VARCHAR(max),DepthColumn INT,FileColumn INT) INSERT INTO @FileTable EXEC master.sys.Xp_dirtree 'c:\testpdf',0,1 DECLARE @cmd VARCHAR(max) DECLARE @FileName VARCHAR(max) DECLARE _CURSOR CURSOR LOCAL FORWARD_ONLY STATIC READ_ONLY FOR SELECT FileName FROM @FileTable OPEN _CURSOR FETCH NEXT FROM _CURSOR INTO @FileName WHILE @@FETCH_STATUS = 0 BEGIN SET @cmd = ' INSERT INTO PDFTest(NumExample ,image_data) SELECT ' + substring(@FileName, 1, 3) + ',image_data FROM OPENROWSET(BULK N''c:\testpdf\' + @FileName + ''',SINGLE_BLOB) AS ImageSource(image_data) ' PRINT @cmd EXEC (@cmd) FETCH NEXT FROM _CURSOR INTO @FileName END --End While CLOSE _CURSOR DEALLOCATE _CURSOR SELECT * FROM pdftest