2011-04-08 89 views
0
IF (@SP_ARGUMENT IS NULL) 

SET @SP_ARGUMENT = (SELECT TOP(1) ID FROM TEST_TABLE) 

SELECT @SP_ARGUMENT AS ARGUMENT_VAL 

以上是我存儲過程的代碼片段。參數賦值不起作用?

但是,當我發送sp_argument爲空,我希望它使用TEST_TABLE的第一個ID爲下面的進一步查詢,但不工作。我在這裏做錯了什麼?

請幫忙。

+0

如果您發佈的代碼,XML或數據樣本,** **請在高亮文本編輯器的線,然後單擊「代碼示例「編輯器工具欄上的按鈕(」{}「),以精確地格式化和語法突出顯示它! – 2011-04-08 08:28:56

+1

當你說不工作時,你能告訴我們什麼是確切的錯誤嗎?你看到了什麼輸出?你如何調用Proc?理解EXEC MYPROC'NULL'&EXEC MYPROC NULL是兩個不同的語句 – 2011-04-08 08:33:01

+0

問題是預期的預期不工作,它仍然是空的,並且Begin End也是我的代碼的很大一部分,在上面錯過了它代碼片段。對不起,格式不好,我第一次在這裏發佈。 – NSN 2011-04-08 09:11:51

回答

1

你可以使用ISNULL做到這一點:

Set @SP_ARGUMENT = IsNull(@SP_ARGUMENT, (SELECT TOP(1) ID FROM TEST_TABLE)) 

SELECT @SP_ARGUMENT AS ARGUMENT_VAL 
+0

'COALESCE'也可以。 – 2011-04-08 12:39:24

0

爲了正確控制T-SQL命令的流程,您需要將SET語句包裝在Begin/End statement中。

IF (@SP_ARGUMENT IS NULL) 
BEGIN 
SET @SP_ARGUMENT = (SELECT TOP(1) ID FROM TEST_TABLE) 
END 
SELECT @SP_ARGUMENT AS ARGUMENT_VAL 
+0

不一定,雖然風格很好。當您有多個語句時,您只需要'BEGIN..END',請參閱http://msdn.microsoft.com/zh-cn/library/aa933214(v=SQL.80).aspx這不應該是原因的錯誤。 – 2011-04-08 08:44:39

+0

哎呀對不起,我錯過了開始結束......問題是與任務不工作! – NSN 2011-04-08 09:10:42