Как проверить, является ли значение пустым в T-SQL в параметризованном запросе? - PullRequest
0 голосов
/ 10 февраля 2011

Давайте представим, что есть таблица Product со столбцами ProductId (smallint), Title (nullable nvarchar (100)) и Price (money). Название может быть null.

Существует запрос, который должен возвращать товары, соответствующие определенному названию и определенной цене:

using (SqlCommand getProducts = new SqlCommand("select ProductId from Product where Title = @title and Price = @price", sqlConnection))
{
    getProducts.Parameters.AddWithValue("@title", title);
    getProducts.Parameters.AddWithValue("@price", price);
}

При выполнении следующего кода с title, установленным в ноль (или, возможно, также в пустую строку), для SQL Server сравнение будет:

[...] where Title = NULL and Price = 123

, который вернет пустой набор, поскольку правильный синтаксис:

[...] where Title is NULL and Price = 123

Я мог бы изменить строку запроса в соответствии с нулевой проверкой заголовка, но это будет невозможно.

Есть ли чистый способ заставить сравнение работать без изменения строки запроса, когда Title равен нулю?

Ответы [ 2 ]

2 голосов
/ 10 февраля 2011
[...] WHERE COALESCE(Title,'') = COALESCE(@Title,'') AND Price = 123
1 голос
/ 10 февраля 2011

Вы можете использовать IsNull () следующим образом ...

using (SqlCommand getProducts = new SqlCommand("select ProductId from Product where IsNull(Title, '') = IsNull(@title, '') and Price = @price", sqlConnection))

Если заголовок равен нулю, для сравнения будет использоваться пустая строка, а не ноль.

[править] Обновлено после комментария a1ex07 ниже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...