Sql server 将PDF插入SQL表
因此,我试图将文件夹中的一组PDF读入SQL表,并将它们保存在varbinarymax字段中。这是我最初认为有效的方法: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
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
'