“%”附近的语法不正确。内部动态 SQL
Incorrect syntax near '%'. inside dynamic SQL
我刚刚发现动态 SQL 但是当我添加像“%”这样的通配符时,我得到了这个错误:
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '%'.
这里是查询:
declare @Filter varchar(50)
set @Filter = '2%'
exec ('select * from dbo.tbl_coa where acct_code like ' + @Filter)
无论如何都可以解决这个问题,还是无法使用动态 SQL?
您连接的字符串不正确。
您应该将其修复为 set @Filter = '''2%'''
,检查下面的结果。
Demo on db<>fiddle
declare @Filter varchar(50)
set @Filter = '''2%'''
print ('select * from dbo.tbl_coa where acct_code like ' + @Filter)
// Output: select * from dbo.tbl_coa where acct_code like '2%'
create table tbl_coa(
acct_code varchar(10)
)
insert into tbl_coa
values('21'),('20'),('30')
declare @Filter varchar(50)
set @Filter = '''2%'''
exec ('select * from dbo.tbl_coa where acct_code like ' + @Filter)
输出
acct_code
21
20
您需要将 @Filter
括在引号中:
exec ('select * from dbo.tbl_coa where acct_code like ''' + @Filter + '''')
请注意,最好将所需的引号放入您执行的查询中,这样如果您执行类似
的操作
set @Filter = (SELECT ... )
查询仍然有效,无需执行类似
的操作
set @Filter = concat('''', (select '2%'), '''')
我刚刚发现动态 SQL 但是当我添加像“%”这样的通配符时,我得到了这个错误:
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '%'.
这里是查询:
declare @Filter varchar(50)
set @Filter = '2%'
exec ('select * from dbo.tbl_coa where acct_code like ' + @Filter)
无论如何都可以解决这个问题,还是无法使用动态 SQL?
您连接的字符串不正确。
您应该将其修复为 set @Filter = '''2%'''
,检查下面的结果。
Demo on db<>fiddle
declare @Filter varchar(50)
set @Filter = '''2%'''
print ('select * from dbo.tbl_coa where acct_code like ' + @Filter)
// Output: select * from dbo.tbl_coa where acct_code like '2%'
create table tbl_coa(
acct_code varchar(10)
)
insert into tbl_coa
values('21'),('20'),('30')
declare @Filter varchar(50)
set @Filter = '''2%'''
exec ('select * from dbo.tbl_coa where acct_code like ' + @Filter)
输出
acct_code
21
20
您需要将 @Filter
括在引号中:
exec ('select * from dbo.tbl_coa where acct_code like ''' + @Filter + '''')
请注意,最好将所需的引号放入您执行的查询中,这样如果您执行类似
的操作set @Filter = (SELECT ... )
查询仍然有效,无需执行类似
的操作set @Filter = concat('''', (select '2%'), '''')