У меня есть хранимая процедура SQL Server внутри мультитенантной БД.Он используется всеми клиентами, но поскольку я не обновляю их все одновременно, мне нужно было указать значения параметров по умолчанию, чтобы клиенты не выдавали ошибку, если они не передали параметр.
Это выглядит так:
ALTER PROCEDURE [dbo].[sp_UpdateSearchValues]
@pAuthID NVARCHAR(255),
@pgKey INT,
@pSearch01 NVARCHAR(255) = 'BTR:NOSEARCHUPDATE',
@pSearch02 NVARCHAR(255) = 'BTR:NOSEARCHUPDATE',
..
@pSearch30 NVARCHAR(255) = 'BTR:NOSEARCHUPDATE'
Я не могу использовать null
в качестве значения по умолчанию, потому что null
является допустимым значением для передачи (для очистки индекса поиска).Однако когда я присваиваю параметр DBNull.Value
, кажется, что хранимая процедура считает, что ничего не передано , и затем хранимая процедура использует в своей логике значение по умолчанию «BTR: NOSEARCHUPDATE» и ничего не делает (вместоочистка значения) - если я назначу DBNull, то! = 'BTR; NOSEARCHUPDATE' ниже оценивается как false.
CASE WHEN @pSearch01 != 'BTR:NOSEARCHUPDATE' THEN @pSearch01 ELSE pSearch01 END,
Этот оператор просто пытается получить значениепараметр, если «что-то было передано (DBNull или value)», в противном случае вернитесь к существующему значению в соответствующем поле db.
Я присваиваю DBNull
, используя следующий код:
UpdateCommand.Parameters[ "@pSearch19" ].Value = DBNull.Value;
Таким образом, вопрос в том, как я могу передать 'null' хранимой процедуре, чтобы она использовала ее в качестве значения вместо простого использования значения по умолчанию 'BTR: NOSEARCHUPDATE'?