1

Template在 SQL Server 2014 中创建了一个表,并希望创建一个用于添加模板(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

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

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' 附近的语法不正确

但我不知道如何纠正它。有任何想法吗?

4

1 回答 1

1

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

declare @sql nvarchar(max) = 'select * from openrowset(bulk ''' + 
    replace(@templatefile, ',', ',,') + ''', SINGLE_BLOB) AS TemplateFile'
exec (@sql)
于 2018-04-22T07:05:18.150 回答