变量无法正常工作

时间:2014-09-02 12:03:53

标签: sql variables sql-server-2005 stored-procedures where-clause

以下代码是存储过程的一部分。我在这里使用的变量很少。 这个程序的逻辑是,一个字符串将包含以逗号(,)分隔的值,我们需要通过拆分输入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语句返回空表,即使它有值。

除了最后一个选择命令

之外,每件事都可以正常工作

感谢您的帮助!!!

1 个答案:

答案 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执行