“%”附近的语法不正确。内部动态 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%'

Full Demo on db<>fiddle

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

Demo on SQLFiddle

请注意,最好将所需的引号放入您执行的查询中,这样如果您执行类似

的操作
set @Filter = (SELECT ... )

查询仍然有效,无需执行类似

的操作
set @Filter = concat('''', (select '2%'), '''')