2016-02-27 16 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をaddinで取ることができないというエラーが出る。これは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] 
関連する問題