2016-02-27 71 views
5

我试图通过SQL插入文件。我使用以下查询。使用存储过程将文件插入到没有前端的SQL Server中

INSERT INTO [dbo].[Attachments] (FileName, FileBinary) 
    SELECT 
     'non-date-in-sql-server-column', 
     BulkColumn 
    FROM 
     OPENROWSET(Bulk 'C:\Users\Pictures\Picture.JPG', SINGLE_BLOB) AS BLOB 

它工作正常。

我想写一个带动态路径的程序。它给我错误,我不能把Filebinary插入。这是数据类型varbinary。什么是最好的办法?

我做了以下,但它没有采取适当的二进制值。

DECLARE @SQLString NVARCHAR(MAX) 

SET @SQLString = 'SELECT ' + '''' [email protected] +'''' + ' AS Name,' + 'FileBinary 

FROM OPENROWSET(BULK N''' + @ImagePath + ''',SINGLE_BLOB) AS FileBinary(FileBinary);' 

Insert Into Attachments (ApplicantID, FileName, FileBinary) 
Values (@ApplicantID, @FileName, Convert(varbinary(max), @SQLString)) 

回答

2

将Insert语句放入动态查询中并执行它。

现在你的@SQLString将不会有FileBinary值它会有动态帧的字符串。您需要执行它才能获得值

DECLARE @SQLString NVARCHAR(MAX), 
     @Filename VARCHAR(500), -- Pass file name here 
     @ApplicantID VARCHAR(500) --Pass Application ID here 

SET @SQLString = ' 
    Insert Into Attachments 
    (
      ApplicantID, 
      FileName, 
      FileBinary 
    ) 
    SELECT @ApplicantID,@Filename,FileBinary 
    FROM OPENROWSET(BULK N''' + @ImagePath 
       + ''',SINGLE_BLOB) AS FileBinary(FileBinary);' 

EXEC Sp_executesql 
    @SQLString, 
    N'@Filename varchar(500),@ApplicantID varchar(500)', 
    @Filename [email protected], 
    @[email protected] 
相关问题