动态 SQL 出错,可能是由于撇号 (SQL SERVER)
Error with Dynamic SQL, maybe due to apostrophe (SQL SERVER)
请帮我找出错误。我认为这是由于撇号,但我不知道如何更正。
我的代码返回错误:
Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'or'.
Use YEAR_TO_DATE;
Declare @policy NVARCHAR(MAX);
Declare @account_list NVARCHAR(MAX);
Declare @sql NVARCHAR(MAX);
Set @policy ='TTY%';
Set @account_list='18000,19000';
Set @sql =
'Select
case
when [Debit_Account] in ('+@account_list+') and ([policy1] like '+@policy+' or [policy2] like '+@policy+' or [policy3] like '+@policy+') then -[Amount]
when [Credit_Account] in ('+@account_list+') and ([policy1] like '+@policy+' or [policy2] like '+@policy+' or [policy2] like '+@policy+') then [Amount]
else 0
end as [Amount]
from CTGS
where [Debit_Account] in ('+@account_list+') or [Credit_Account] in ('+@account_list+')';
EXEC sp_executesql @sql;
您忘记在动态 SQL 字符串中添加字符串定界引号。
您的代码(重复了几次):
' .... [policy1] like '+@policy+' .... '
如果你添加这个:
DECLARE @qt VARCHAR(1) = CHAR(39)
然后你可以用这个解决问题(也多次):
' .... [policy1] like '+@qt+@policy+@qt+' .... '
请注意,除了 @qt
,您还可以在需要的字符串中直接使用 ''
(两个单引号),但在我看来,这通常会产生难以阅读的代码.
另请注意,如果 @policy
本身也可以包含一个或多个引号,则您必须使用 REPLACE
转义这些引号,如下所示:
' .... [policy1] like '+@qt + REPLACE(@policy, @qt, @qt+@qt) + @qt+' .... '
请帮我找出错误。我认为这是由于撇号,但我不知道如何更正。
我的代码返回错误:
Msg 156, Level 15, State 1, Line 3 Incorrect syntax near the keyword 'or'.
Use YEAR_TO_DATE;
Declare @policy NVARCHAR(MAX);
Declare @account_list NVARCHAR(MAX);
Declare @sql NVARCHAR(MAX);
Set @policy ='TTY%';
Set @account_list='18000,19000';
Set @sql =
'Select
case
when [Debit_Account] in ('+@account_list+') and ([policy1] like '+@policy+' or [policy2] like '+@policy+' or [policy3] like '+@policy+') then -[Amount]
when [Credit_Account] in ('+@account_list+') and ([policy1] like '+@policy+' or [policy2] like '+@policy+' or [policy2] like '+@policy+') then [Amount]
else 0
end as [Amount]
from CTGS
where [Debit_Account] in ('+@account_list+') or [Credit_Account] in ('+@account_list+')';
EXEC sp_executesql @sql;
您忘记在动态 SQL 字符串中添加字符串定界引号。
您的代码(重复了几次):
' .... [policy1] like '+@policy+' .... '
如果你添加这个:
DECLARE @qt VARCHAR(1) = CHAR(39)
然后你可以用这个解决问题(也多次):
' .... [policy1] like '+@qt+@policy+@qt+' .... '
请注意,除了 @qt
,您还可以在需要的字符串中直接使用 ''
(两个单引号),但在我看来,这通常会产生难以阅读的代码.
另请注意,如果 @policy
本身也可以包含一个或多个引号,则您必须使用 REPLACE
转义这些引号,如下所示:
' .... [policy1] like '+@qt + REPLACE(@policy, @qt, @qt+@qt) + @qt+' .... '