在存储过程T-SQL中插入varbinary数据

时间:2018-04-22 07:00:11

标签: sql-server stored-procedures varbinarymax

我在SQL Server 2014中创建了一个Template表,并希望创建一个添加模板(Word模板文件)和模板名称的过程。我创建了下表:

create table Template
(
    PK_TemplateID int identity(1,1) primary key,
    TemplateName nvarchar(30) not null unique,
    TemplateFile varbinary(max) not null
);

并且以下代码插入记录:

INSERT INTO Template(TemplateName,TemplateFile)
   SELECT 
       'SaleTemplate.dotx' AS TemplateName,
       * 
   FROM 
       OPENROWSET(BULK N'C:\Users\User10\Desktop\example_file.dotx', SINGLE_BLOB) AS TemplateFile
GO

现在,我在创建插入Template表的过程时遇到了问题。这是我最接近的:

create procedure dbo.inserttemplate
    @TemplateName varchar(30),
    @TemplateFile varchar(200)
as
    insert into Template(TemplateName, TemplateFile)
        select 
            @TemplateName as TemplateName,
            * 
        from
            OPENROWSET(bulk @templatefile, SINGLE_BLOB) AS TemplateFile

错误如下:

  

'@templatefile'附近的语法不正确

但我无法弄清楚如何纠正它。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

openrowset函数不接受参数,只接受字符串文字。您可以通过创建一个动态SQL字符串并将其传递给exec来解决此问题:

declare @sql nvarchar(max) = 'select * from openrowset(bulk ''' + 
    replace(@templatefile, ',', ',,') + ''', SINGLE_BLOB) AS TemplateFile'
exec (@sql)