Sql server 带参数的SQL Server存储过程(用于按路径输入图像)不工作

Sql server 带参数的SQL Server存储过程(用于按路径输入图像)不工作,sql-server,tsql,stored-procedures,dynamic-sql,Sql Server,Tsql,Stored Procedures,Dynamic Sql,我有一个将图像存储为varbinary的表,我想创建一个存储过程来插入图像,方法是提供图像的路径 但它不起作用 CREATE PROCEDURE AddImage @ImagePath VARCHAR(255) AS DECLARE @sql VARCHAR(MAX) SET @sql = 'INSERT INTO Image(RawValue) SELECT BulkColumn FRO

我有一个将图像存储为varbinary的表,我想创建一个存储过程来插入图像,方法是提供图像的路径

但它不起作用

CREATE PROCEDURE AddImage 
    @ImagePath VARCHAR(255)
AS
    DECLARE @sql VARCHAR(MAX)

    SET @sql = 'INSERT INTO Image(RawValue)
                    SELECT BulkColumn
                    FROM Openrowset(Bulk '+ @ImagePath +', Single_Blob) AS img';

    EXEC(@sql)
GO
当我尝试执行它时:

EXEC AddImage @ImagePath = 'C:\Users\[myname]\Desktop\wit4.jpg'
我遇到了以下错误

Msg 102,15级,状态1,第39行 “仅”附近的语法不正确


哪里出错了?

字符串周围需要一对额外的单引号:

SET @sql = '
        INSERT INTO 
            Image(RawValue)
        SELECT  BulkColumn
        FROM Openrowset(Bulk '''+ @ImagePath +''', Single_Blob) as img
';
我不知道你是否可以把它作为一个参数传入。如果可以,我强烈建议您这样做,而不是咀嚼查询字符串


在SQL中,可以通过将单引号加倍,将其放入字符串中。因此,带有单引号的字符串表示为。两个外部单引号分隔字符串。两个内部单引号定义了单引号字符。

谢谢,这很有效,我想问tho,为什么会这样?它需要什么3?TSQL字符串文字中的单引号需要转义,否则字符串文字将结束。通过在文本字符串中插入两个单引号来转义一个单引号。QuoteName在这里不也起作用吗:QuoteName@ImagePath,@MarkKram。我会小心地在不应该是标识符的东西上使用QUOTENAME。QUOTENAME的目的是安全地转义标识符,而不是泛型字符串。