2013-12-12 2 views
1

Мне нужно вернуть значение (0), если ничего не найдено в SQL-вызове.Возвращает целое число, если ничего не найдено (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 EXISTS», «выход» по-разному, но не могу заставить его работать ...

+0

Зачем вам нужно добавить 1? Вы пытаетесь получить инкрементное целое в качестве основного ключа? Если это так, то просто установите этот столбец как идентификатор, и вам никогда не нужно вставлять в него что-либо. Просто установите 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 предоставленной Microsoft, но будет работать на несколько платформ БД и может работать с несколькими резервных объявлениями.

W3Schools отличное введение в нулевое обращение here.

Смежные вопросы