以下代码是存储过程的一部分。我在这里使用的变量很少。 这个程序的逻辑是,一个字符串将包含以逗号(,)分隔的值,我们需要通过拆分输入sting来获取每个字符串。现在,分隔的字符串将在查询中用于执行。
示例代码
@ cond1 - >输入字符串(例如)(''mark'',''lewis'',)
@splt - >分隔的字符串(即)标记
Declare @pos INT, @len INT
set @pos = 0
set @len = 0
WHILE CHARINDEX(',', @cond1, @pos+1)>0
BEGIN
set @len = CHARINDEX(',', @cond1, @pos+1) - @pos;
set @splt = SUBSTRING(@cond1, @pos, @len);
if @pid = ''
Begin
set @pid= @splt;
End
Else
Begin
set @pid= @pid + ' or positionid='+ @splt;
End
set @pos = CHARINDEX(',', @cond1, @pos+@len) +1;
END
END
print 'SELECT day1,day1leg1,day1leg2,hccyamt,pfid,pcfcccy,pcfcbank,maturitydate,availeddate FROM rskpcfc WHERE
pcfcid='+@pcid;
SELECT day1,day1leg1,day1leg2,hccyamt,pfid,pcfcccy,pcfcbank,maturitydate,availeddate FROM rskpcfc WHERE
pcfcid=@pcid;
执行上述代码时,
exec [dbo].[pcfc_select] @status='APCASSD',@cond1='''pc14-46-119'',''pc14-47-119'','
Print语句将提供以下内容
SELECT day1,day1leg1,day1leg2,hccyamt,pfid,pcfcccy,pcfcbank,maturitydate,availeddate FROM rskpcfc WHERE
pcfcid='pc14-46-119' or pcfcid='pc14-47-119'
但是select语句返回空表,即使它有值。
除了最后一个选择命令
之外,每件事都可以正常工作感谢您的帮助!!!
答案 0 :(得分:2)
在最后一行执行的查询是:
SELECT day1,day1leg1,day1leg2,hccyamt,pfid,pcfcccy,pcfcbank,maturitydate,availeddate
FROM rskpcfc
WHERE pcfcid='''pc14-46-119'' or pcfcid=''pc14-47-119'''
而不是打印时看到的那个。您不能使用参数替换动态地向where子句添加条件。
要实现此目的,您应该使用sp_executesql过程或exec。
来使用动态sql执行