【问题标题】:Variable is not working at condition变量在条件下不工作
【发布时间】:2014-10-26 16:40:31
【问题描述】:

以下代码是存储过程的一部分。在这里我使用了几个变量。 这个程序的逻辑是,一个字符串将包含用逗号(,)分隔的值,我们需要通过拆分输入字符串来获取每个字符串。现在将在查询中使用分隔的字符串来执行。

示例代码

@cond1-->输入字符串(eg)(''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'','

打印语句会给出以下内容

SELECT day1,day1leg1,day1leg2,hccyamt,pfid,pcfcccy,pcfcbank,maturitydate,availeddate FROM rskpcfc WHERE 
        pcfcid='pc14-46-119' or pcfcid='pc14-47-119'

但是select语句即使有值也会返回空表。

除了最后一个选择命令外,一切都很好

感谢您的帮助!!!

【问题讨论】:

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


    【解决方案1】:

    在最后一行执行的查询是:

    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 执行。

    【讨论】:

      猜你喜欢
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-01
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多