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

问题描述 投票:0回答:1

我有一个将图像存储为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行'mere'附近的语法不正确。

我要去哪里错了?

sql-server tsql stored-procedures dynamic-sql
1个回答
1
投票

您需要在字符串周围加一对单引号:

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

我不知道您是否可以将其作为参数传递。如果可以的话,我强烈建议您这样做,而不要浪费查询字符串。

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

© www.soinside.com 2019 - 2024. All rights reserved.