1

我正在使用 aDataGridView来显示 MSSQL 数据库中的数据。我有几个文本输入字段,当onkeyup注册事件时,它执行lookup query(使用表适配器)文本字段作为parameterSQL 字符串。

我的数据库当前设置为具有一些可为空的字段。

当我在文本输入字段中有一个长度为零的字符串值时,该值不为空,因此 SQL Select 不会(LIKE clause)将文本框值与数据库中的 NULL 值匹配。

处理这种情况的最佳方法是什么?将数据库中的所有空字段都转换为NULL?

在查询数据库时,我可以将任何空白输入字符串转换为 null,但这意味着数据库中任何为空字符串且实际上不是 null 的字段都将被排除。

我想我可能遗漏了一些明显的东西,我在网上找不到任何类似的问题,但如果有人能指出我正确的方向,那就太好了!

4

5 回答 5

3

如果您想选择为空但包含空字符串的数据,那么您可以像这样更改您的选择查询:

select * from your_table where some_column is null or len(some_column) = 0

不完全确定你在找什么,但怎么样

SELECT * FROM Table 
WHERE (Param1 is null or Column1 LIKE '%' + Param1 + '%')
and (Param2 is null or Column2 LIKE '%' + Param2 + '%')
于 2012-05-30T16:20:37.440 回答
2

我也按其他参数过滤。例如,我从文本框中填写了 2 个参数...

如果要处理多个搜索参数:

...
WHERE ( @field1 IS NULL OR COALESCE(field1,'') like '%' + @field1 + '%' )
AND   ( @field2 IS NULL OR COALESCE(field2,'') like '%' + @field2 + '%' )
AND   ( @field3 IS NULL OR COALESCE(field3,'') like '%' + @field3 + '%' )
于 2012-05-30T16:28:09.703 回答
1

尝试像这样使用。如果您的字段值为空,只需将其转换为空字符串并查找您的参数。

select * from table
ISNULL(field,'') like @yourparam
于 2012-05-30T16:22:21.980 回答
1

我假设您正在使用ASP.NET

首先,我认为设计中存在问题。您将一遍又一遍地参加 的Database每个KeyPress事件TextBox。如果您可以通过保存数据来避免它ViewState/Session

回到原来的查询...

Declare @Param Varchar(100)
Set @Param = null

if(@Param is null or @Param = '')
Begin
     select * from your_table
End
Else
Begin
     select * from your_table where some_column like '%' + @Param + '%'
End
于 2012-05-30T17:13:39.973 回答
0
SELECT * FROM Table 
Where Column1 LIKE '%' + ISNULL(Param1,Column1) + '%'

上面将检查参数是否为NULL。如果它为 NULL,则只需将其与相同的列名进行比较。这是最简单和最短的方法。

于 2013-10-26T11:07:00.927 回答