| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > В хранимых процедурах не работает функция ISNULL |
| Автор: Medved 6.11.2004, 15:42 | ||||
Вот быстренько набросал тестовой примерчик, где я создаю таблицы и ХП:
Вот выполняю:
При вставке первой записи вновь созданную таблицу, ISNULL возвращает NULL, хотя по идее должен 0. MSSQL2000. |
| Автор: Medved 6.11.2004, 16:09 | ||||
Если заменить:
На:
То все работает как надо, но мне хотелось бы более красивого решения. |
| Автор: Euclid 16.12.2004, 20:09 |
| Цитита CREATE PROCEDURE [up_members];1 @out_id [int] OUTPUT ,@in_msname [varchar] (255) AS SET SELECT @out_id = ISNULL(@@IDENTITY,0) + 1 FROM members SET INSERT members (msname) VALUES (@in_msname) GO Судя по тексту вначале SET SELECT @out_id = ISNULL(@@IDENTITY,0) + 1 FROM members а потом вставка новой записи INSERT members (msname) VALUES (@in_msname) то есть для строчки: SET SELECT @out_id = ISNULL(@@IDENTITY,0) + 1 FROM members в таблице members еше нет ни одной записи, это значит, что запрос вообще не обрабатывается и переменной @out_id ничего не присваивается, то есть она остается NULL, и это не зависит никака от того, что написано после знака = Это типичная ситуация declare @v int ( тип любой ) SET @v = isnull(что-нибудь, 0) from TABLE where.... если записи с выбранным условием отсутсвуют, то isnull просто не вызывается и у @v остается значение, которое было до строчки SET, в данном случае NULL |