以下是我尝试在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
答案 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