SQL Server 2005有条件地在SP中分配变量

时间:2011-07-12 16:41:21

标签: sql tsql variables stored-procedures conditional

以下是我尝试在SQL Server 2005中编写的存储过程的简化版本。

我的问题是:

我已经声明了一个变量@docid我想要分配查询的结果,因为我通过我的光标迭代,如果没有完全匹配,那么我想运行另一个查询并尝试下一场最佳比赛。

我尝试进行IF @docid IS NULL then BEGIN [second query]的测试。这不起作用,因为变量@docid将不会Null它将保留先前的值,直到满足第一个查询的条件并为其分配新值。

那么如何说“如果我尝试将docid分配给变量@docid,但根据查询中的条件没有匹配,则改为运行下一个查询或set @docid=''"?任何帮助都会谢谢。谢谢

declare @docid bigint,
        @account varchar(30)

While @@fetch_status=0
BEGIN
   Select @Docid=Docid
   FROM printdata 
   WHERE Account=@account

   IF @docid Is Null --Docid Is never Null once assigned a value
   BEGIN
     Select @Docid=Docid
     FROM printdata 
     WHERE balance=@balance
  END

1 个答案:

答案 0 :(得分:3)

好吧,我首先将@docid初始化为NULL - 如果没有找到,为NULL:

declare @docid bigint,
        @account varchar(30)

While @@fetch_status=0
BEGIN
   SET @docid = NULL

   SELECT @Docid = Docid
   FROM printdata 
   WHERE Account = @account

   IF @docid IS NULL  --  @Docid *WILL* be NULL now if nothing is found!
   BEGIN
     SELECT @Docid = Docid
     FROM printdata 
     WHERE balance = @balance
  END