在动态SQL中,如果文件名中包含引号,则无法对其进行转义

问题描述 投票:-1回答:1
declare @Path varchar(max) = 'E:\test\PS\Document\159203\Driver''s License and Insurance Card';

EXEC ('INSERT INTO table
        SELECT ''' + @id+ ''', BulkColumn FROM OpenRowSet ( Bulk ''' + @path + ''', Single_Blob) AS table')

这里的路径具有带引号的文件名,我无法转义并得到错误:

Msg 105,第15级,状态1,第36行字符串',Single_Clob)后的右引号引起来[AS [NOTE_CONTENT]'

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

例如,您只需要再次转义单引号即可。>>

declare @Path varchar(max) = 'E:\test\PS\Document\159203\Driver''s License and Insurance Card', @Id varchar(38) = '', @Sql varchar(max);

set @Sql = 'SELECT ''' + @id + ''', ''' + replace(@path,'''','''''') + '''';

print (@Sql);
exec (@Sql);

注意:使用SQL,我可以执行而无需访问文件,只需进行调整即可。

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