错误信息 字符串后未闭合的引号

Error Message Unclosed quotation mark after the character string

我在执行查询时收到此错误消息。

Msg 105, Level 15, State 1, Line 1
Unclosed quotation mark after the character string ''

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ''

我的代码:

DECLARE @imgLogo VARCHAR(50)
DECLARE @savPicture VARBINARY(MAX)
DECLARE @strPerson VARCHAR(50) = 'Max Verstappen'

SET @imgLogo = 'SET @SavPicture = (SELECT * FROM OPENROWSET (BULK N''C:\Program Files\Microsoft SQL Server0\Couriers\ + TRIM (cast('+ @strPerson + '''as char(30))) + .jpg'

EXEC (@imgLogo)

有人可以帮我吗?

运行 使用如下所示的 PRINT 语句编写您的代码,您将看到 @imgLogo 的长度设置为 50。因此您的字符串被截断了。这是一个快速示例,说明当您不确定搜索引擎接收到的内容时如何调试动态 SQL:

DECLARE @imgLogo VARCHAR(50)
DECLARE @savPicture VARBINARY(MAX)
DECLARE @strPerson VARCHAR(50) = 'Max Verstappen'

SET @imgLogo = 'SET @SavPicture = (SELECT * FROM OPENROWSET (BULK N''C:\Program Files\Microsoft SQL Server0\Couriers\ + TRIM (cast('+ @strPerson + '''as char(30))) + .jpg'

PRINT @imgLogo

我修复了它,它标记了那个错误,因为有几个字符没有逗号或多余的 )。我还修复了如果您不指定 SINGLE_NCLOB 就会出现的另一条消息。我给你的唯一问题是标量变量的问题。如果喜欢请给我投票,我解决你的问题,多一点但不全。

DECLARE @imgLogo VARCHAR(200)
DECLARE @SavPicture VARBINARY(MAX)
DECLARE @strPerson VARCHAR(50) = 'Max Verstappen'

SET @imgLogo = 'SET @SavPicture = (SELECT * FROM OPENROWSET (BULK N''C:\Program Files\Microsoft SQL Server0\Couriers\' + TRIM(cast(+ @strPerson as char(30))) + '.jpg'',SINGLE_NCLOB) as imagefile)'

EXEC (@imgLogo)