Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
anta-res Member Откуда: Сообщений: 41 |
Есть хп с двумя параметрами, один (@personid int) обязательный, второй (@peroncode bit = null) нет. хп сохраняет или апдейтит значение в поле peroncode (bit может быть null) в процессе работы хп выполняется несколько раз: usp_savepersoncode 1256; usp_savepersoncode 1256, 1; usp_savepersoncode 1256, 0; usp_savepersoncode 1256, null; -- здесь проблема т.к. @peroncode по умолчанию у нас null и мы делаем проверку: peroncode = ISNULL([SOURCE].peroncode,[TARGET].peroncode) не получается записать значение null, остаётся 0 или 1. Подскажите, пожалуста, как можно это решить. SQLServer 2008R2 ALTER PROCEDURE usp_savepersoncode @personid int, @peroncode bit = null AS BEGIN SET NOCOUNT ON; MERGE t_person as [TARGET] USING (SELECT @personid AS personid, @peroncode AS peroncode ) AS [SOURCE] ON ([SOURCE].personid = [TARGET].personid) WHEN MATCHED THEN UPDATE SET peroncode = ISNULL([SOURCE].peroncode,[TARGET].peroncode) WHEN NOT MATCHED THEN INSERT ( personid, personcode ) VALUES ( [SOURCE].personid, [SOURCE].peroncode ) ; END GO |
15 авг 14, 18:11 [16447877] Ответить | Цитировать Сообщить модератору |
Jovanny Member Откуда: Сообщений: 1196 |
Если такой записи нет, должно вставить NULL. А если запись есть, оставит существующее значение. Так что не так? |
||
15 авг 14, 18:18 [16447900] Ответить | Цитировать Сообщить модератору |
anta-res Member Откуда: Сообщений: 41 |
usp_savepersoncode 1256;
записывает в таблицу 1256 NULL usp_savepersoncode 1256, 0; записывает в таблицу 1256 0 usp_savepersoncode 1256, 1; записывает в таблицу 1256 1 usp_savepersoncode 1256, null; по идее должно получится в таблице 1256 null но остаётся предыдущее значение т.e 1256 1 |
15 авг 14, 18:33 [16447946] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
anta-res, различить внутри процедуры, передавался или не передавался в нее опциональный параметр, не получится. если такое действительно нужно, явно задавайте третий параметр, который будет указывать, надо ли апдейтить peroncode. |
15 авг 14, 18:38 [16447964] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
ну или указывайте значением по умолчанию что-то, что заведомо никогда передано быть не может. тип параметра сменить тогда придется. |
15 авг 14, 18:40 [16447978] Ответить | Цитировать Сообщить модератору |
Shakill Member Откуда: мск Сообщений: 1882 |
странная идея. как вы думаете, что должно вернуть выражение ISNULL([SOURCE].peroncode,[TARGET].peroncode)если [SOURCE].perncode у вас равен NULL? |
||
15 авг 14, 18:42 [16447987] Ответить | Цитировать Сообщить модератору |
anta-res Member Откуда: Сообщений: 41 |
daw
Пробовал всё ,поле bit, варианты 0, 1, NULL (-1 толкуется как 1) и все могут передаваться. Что посоветуете?
жаль, я думал это возможно |
||||
15 авг 14, 23:40 [16448964] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
|
||
15 авг 14, 23:54 [16449022] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
WHEN MATCHED THEN UPDATE SET peroncode = [SOURCE].peroncode |
||
16 авг 14, 06:18 [16449549] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |