SQL语法错误求助:Incorrect syntax near ''问题排查
SQL代码语法错误排查:Incorrect syntax near '' 问题分析
这段动态拼接的SQL代码执行时触发语法错误,报错信息如下:
Msg 102, Level 15, State 1, Line 59
Incorrect syntax near ''.
错误出自以下代码片段:
AND ('''+@searchText+''' = '''' OR (ISNULL(CAST(t1.id as varchar(10)),'''') + '' '' + ISNULL(CAST(FORMAT(t1.reading_date,@dateformat) as varchar(12)),'''')+'' '' + ISNULL(t2.description,'''') + '' '' + ISNULL(t3.equipment_no,'''') + '' '' + ISNULL(t4.description,'''') + '' '' + ISNULL(CAST(t1.actual_usage as nvarchar(16)),'''') + '' '' + ISNULL(t5.uom_code,'''') + '' '' + ISNULL(CAST(t1.actual_cost as nvarchar(16)),'''') + '' '' + ISNULL(t6.currency_code,'''') + '' '' + ISNULL(t1.comment,'''') + '' '' + ISNULL(CAST(FORMAT(t1.actual_date,@dateformat) as varchar(12)),'''')) LIKE ''%'' '''+@searchText+''' ''%'')
问题原因
- LIKE条件的字符串拼接错误:
原代码中LIKE部分写为''%'' '''+@searchText+''' ''%'',动态拼接后会生成类似'%' '搜索内容' '%'的语句——三个独立字符串直接相邻,SQL无法识别这种写法,导致语法报错。 - 引号转义逻辑混乱:
单引号组合方式错误,没有将搜索关键词与通配符%正确拼接成一个完整的匹配字符串。
修正方案
调整LIKE条件的拼接逻辑,将通配符和@searchText合并为一个字符串,修正后的代码如下:
AND ('''+@searchText+''' = '''' OR (ISNULL(CAST(t1.id as varchar(10)),'''') + '' '' + ISNULL(CAST(FORMAT(t1.reading_date,@dateformat) as varchar(12)),'''')+'' '' + ISNULL(t2.description,'''') + '' '' + ISNULL(t3.equipment_no,'''') + '' '' + ISNULL(t4.description,'''') + '' '' + ISNULL(CAST(t1.actual_usage as nvarchar(16)),'''') + '' '' + ISNULL(t5.uom_code,'''') + '' '' + ISNULL(CAST(t1.actual_cost as nvarchar(16)),'''') + '' '' + ISNULL(t6.currency_code,'''') + '' '' + ISNULL(t1.comment,'''') + '' '' + ISNULL(CAST(FORMAT(t1.actual_date,@dateformat) as varchar(12)),'''')) LIKE ''%'+@searchText+'%'')
关键修正点
- 将原LIKE部分的
''%'' '''+@searchText+''' ''%''修改为''%'+@searchText+'%'',确保拼接后生成合法的匹配字符串'%搜索内容%',避免无连接符的字符串相邻问题。 - 确认所有单引号转义正确,保证动态SQL生成后引号完全闭合,无语法遗漏。
内容的提问来源于stack exchange,提问作者Shehan Silva
相关产品推荐
相关产品推荐

