Sql server 将PDF插入SQL表

Sql server 将PDF插入SQL表,sql-server,Sql Server,因此,我试图将文件夹中的一组PDF读入SQL表,并将它们保存在varbinarymax字段中。这是我最初认为有效的方法: CREATE TABLE tempFileName(filnavn VARCHAR(100)); INSERT INTO tempFileName EXEC xp_cmdshell 'dir /B "C:\temp\Test Folder\"'; -------- DECLARE @path VARCHAR(100) SET @path = 'C:\temp\Test Fol

因此,我试图将文件夹中的一组PDF读入SQL表,并将它们保存在varbinarymax字段中。这是我最初认为有效的方法:

CREATE TABLE tempFileName(filnavn VARCHAR(100));
INSERT INTO tempFileName
EXEC xp_cmdshell 'dir /B "C:\temp\Test Folder\"';
--------
DECLARE @path VARCHAR(100) SET @path = 'C:\temp\Test Folder\'
DECLARE @pdf VARBINARY(MAX)
DECLARE @navn varchar(50)
DECLARE @fullpath nvarchar(max)
DECLARE @sql nvarchar(max)

DECLARE c CURSOR FOR
    SELECT filnavn
    FROM tempFileName
OPEN c

FETCH NEXT FROM c INTO @navn
WHILE(@@FETCH_STATUS = 0)
BEGIN
        SET @fullpath = @path + @navn
        SELECT @pdf = BulkColumn
        FROM OPENROWSET(BULK @fullpath, SINGLE_BLOB) AS Document;
        --print @sql

        INSERT INTO pdftest VALUES(@navn, @pdf)
    FETCH NEXT FROM c INTO @navn
END
CLOSE c
DEALLOCATE c
但这不起作用,因为它不允许我在这行中使用变量:

FROM OPENROWSET(BULK @fullpath, SINGLE_BLOB) AS Document;
所以我很确定关键是让整个select@pdf。。将行转换为字符串,然后执行它,但我不确定如何将输出放入表中。我试过这样的方法:

SET @fullpath = @path + @navn
SET @sql = 'DECLARE @pdf VARBINARY(MAX) SELECT @pdf = BulkColumn
FROM OPENROWSET(BULK ''' + @fullpath + ''' , SINGLE_BLOB) AS Document;'
--print @sql

--SELECT @pdf, DATALENGTH(@pdf)
--INSERT INTO pdftest VALUES(@navn, @pdf)
EXEC sp_executesql @sql, N'@fil varbinary(max) out', @fil out

但是@fil变量在此之后就是空的。如何最好地将这些文件放入表中

为什么不跳过循环中SELECT的变量赋值,在INSERT中使用OPENROWSET函数呢?总体思路:

INSERT INTO pdftest SELECT @navn, * FROM OPENROWSET(BULK, 'C:\thefile.txt', SINGLE_BLOB) AS document
SET @sql = 
'INSERT INTO pdftest
SELECT '' + @navn + '', *
FROM OPENROWSET(BULK, ''' + @fullpath + ''', SINGLE_BLOB) AS document
'
当然,将上述内容转换为动态SQL。我可能会在这里错误地引用一些单引号,但总体思路是:

INSERT INTO pdftest SELECT @navn, * FROM OPENROWSET(BULK, 'C:\thefile.txt', SINGLE_BLOB) AS document
SET @sql = 
'INSERT INTO pdftest
SELECT '' + @navn + '', *
FROM OPENROWSET(BULK, ''' + @fullpath + ''', SINGLE_BLOB) AS document
'