2013-12-12 17 views
1

如果在SQL調用中沒有發現任何東西,我需要返回一個值(0)。如果什麼都找不到,就返回一個整數(TSQL ASP.NET VB)

下面是我所擁有的(編輯/簡化以使上下文更有意義),這是從代碼隱藏調用的baing。

sql1 = "INSERT INTO [Xtr_MenuItems]([menu_order]) 
values(1 + (select max(menu_order) from [Xtr_MenuItems])) 

SO到數據庫中,我插入[menu_order] + 1能正常工作中發現的最大數量,假設的東西被發現。

但是,如果(select max(menu_order) from [Xtr_MenuItems]))失敗(沒有找到),那麼我想返回0(如1 + =沒什麼沒什麼,和SQL爆炸)

我怎樣才能做到這一點?我曾嘗試「IF存在」,以各種方式「輸出」,但不能得到它的工作...

+0

爲什麼你需要添加1?你想獲得一個遞增的整數作爲主鍵?如果是這樣,那麼只需將該列設置爲ID,並且您永遠不需要插入任何內容。只需在表格設計中將IsIdentity設置爲Yes並將Identity Increment設置爲1即可。 –

+0

@JonathonCowley - 我需要插入1如果這是子菜單中的第一項,那麼我可以改變菜單的顯示順序。 –

+0

Gotcha。在這種情況下,你需要ISNULL功能。 –

回答

2

試試這個:

sql1 = "INSERT INTO [Xtr_MenuItems]([menu_order]) 
values(1 + ISNULL((select max(menu_order) from [Xtr_MenuItems]),0)) 

我使用ISNULL函數,其中,如果查詢的結果是空的回報0

+0

那很簡單! 很好地工作謝謝你:-) –

+0

@DarkcatStudios:祝你有美好的一天;) –

1

相反的values,你可以使用select直線距離:

insert Xtr_MenuItems 
     (menu_order) 
select 1 + isnull(max(menu_order),0) 
from Xtr_MenuItems 
0

COALESCE是標準提供alternati兼容的方式空值VES:

sql1 = "INSERT INTO [Xtr_MenuItems]([menu_order]) 
values(1 + COALESCE((select max(menu_order) from [Xtr_MenuItems]),0)) 

它具有類似的語法由微軟提供的ISNULL功能,但會在多個數據庫平臺上工作,並可以同時處理多回退。

W3Schools privides很好的介紹空處理here