2016-02-27 20 views
5

Sto cercando di inserire il file tramite SQL. Io uso la seguente query.Inserire il file in SQL Server senza front end utilizzando la stored procedure

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 

Sta funzionando bene.

Voglio scrivere la procedura che prende il percorso dinamico. Mi dà errore che non riesco a prendere Filebinary in addin. Quale è il tipo di dati varbinary. Qual è il modo migliore per fare?

Ho seguito, ma non ha preso correttamente il valore binario.

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)) 

risposta

2

Inserire l'istruzione Insert in una query dinamica ed eseguirla.

Ora il tuo @SQLString non avrà il valore FileBinary con la stringa con cornice dinamica. È necessario eseguirlo per ottenere i valori

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]