Sql server 无法在文件名包含引号的动态SQL中转义引号

Sql server 无法在文件名包含引号的动态SQL中转义引号,sql-server,tsql,dynamic-sql,Sql Server,Tsql,Dynamic Sql,此处路径包含带引号的文件名,我无法对其进行转义并获取错误: 味精105,第15级,状态1,第36行 字符串''Single_Clob)后面的未闭合引号为[NOTE_CONTENT]' 你只需要再次转义单引号 declare @Path varchar(max) = 'E:\test\PS\Document\159203\Driver''s License and Insurance Card'; EXEC ('INSERT INTO table SELECT ''' + @id

此处路径包含带引号的文件名,我无法对其进行转义并获取错误:

味精105,第15级,状态1,第36行 字符串''Single_Clob)后面的未闭合引号为[NOTE_CONTENT]'


你只需要再次转义单引号

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')

注意:使用SQL,我可以在不访问文件的情况下执行,只需根据需要进行调整。

路径看起来像E:\test\PS\Document\159203\Driver's License and Insurance Card路径不是静态的,它在所有记录中都不同,这就是为什么我要对它进行注释,如果它是一个单引号?E:\test\PS\Document\159203\Driver's License and Insurance Card’示例使用单引号。。。您始终必须使用双单引号,因此即使declare语句中有2个单引号,字符串中也只有一个单引号。试试看:)我们来做个动态测试怎么样?@PranayKumar试试看!!!!:)这是相同的原则,这是一个通用的解决方案,在SQL中使用时,您始终必须将单引号对折。@PranayKumar然后您需要更新您的问题并确保其为a-如果您只问了半个问题,您将只能得到半个答案。
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);