SQL 将 Access DB 空值转换为空白字符串
SQL Converting Access DB null value to blank string
我一直在尝试修复这个错误,并且已经纠结了太久。我用 Google 搜索了很多次并搜索了这个网站,但似乎无法找到适合我的正确答案,尽管这个问题有很多不同的变体。
我正在使用 VB.Net 和后端的 Access 数据库编写前端 GUI。该数据库在我的合作伙伴 Table 中的 PartnerFirstName
、PartnerLastName
和 Organization
中具有 NULL 值。我将这些加载到我的应用程序中的数据表中,以便用户可以搜索它们。我上周才发现一些合作伙伴(具有 NULL 值的合作伙伴)没有加载。
代码如下:
("SELECT IDPartner, IIF(ISNULL(PartnerFirstName),'',PartnerFirstName) as PartnerFirstName, IIF(ISNULL(PartnerLastName), '', PartnerLastName) AS PartnerLastName, IIF(ISNULL(Organization), '', Organization) AS Organization, " & _
"Address1, City, State, Zip, Country, Active " & _
"FROM tblPartner " & _
"WHERE IDPartner like '%" & txtPartnerID.Text & "%' AND " & _
" PartnerFirstName like '%" & txtFirstName.Text & "%' AND " & _
" PartnerLastName like '%" & txtLastName.Text & "%' AND " & _
" Organization like '%" & txtOrganization.Text & "%' AND " & _
" Address1 like '%" & txtStreet.Text & "%' AND " & _
" City like '%" & txtCity.Text & "%' AND " & _
" State like '%" & txtState.Text & "%' AND " & _
" Zip like '%" & txtZipCode.Text & "%' AND " & _
" Country like '%" & txtCountry.Text & "%' " & _
"ORDER BY IDPartner, partnerlastname, partnerfirstname", cn)
like
的原因是因为我希望搜索根据表单的文本框值实时更新。这是我的问题的根源,因为默认情况下它们是空白并且数据库有空值。
===================
编辑:
感谢最初的评论。我现在意识到我使用了不正确的功能。 Baro 建议的 IIF 让我现在通过了 SQL,这太棒了!
我遇到的记录未显示问题似乎出在我的 WHERE 子句中。如果我删除它,那么所有记录都会加载到我的数据表中。当我如图所示包含 Where 子句时,记录将排除 NULL 值。
我曾尝试使用 OR PartnerFirstName IS NULL
(以及其他字段),但这会留下太多额外的结果,这些结果也有 NULL 值。现在我不知道该怎么做才能允许搜索,因为我知道问题出在语句的 Where 部分。
问题是 WHERE
谓词针对的是原始字段,该字段尚未应用 IIF(ISNULL(...))
表达式。
很难看到,因为您已将 SELECT
语句中的字段别名设置为与基础字段同名。因此,查询正在执行您指示它执行的操作,尽管不是您希望它执行的操作。
为了解决这个问题,我会使用一个子查询将 NULL
值转换为空字符串,然后在外部查询中添加您的 WHERE
谓词。像下面这样的东西应该可以解决问题:
("SELECT q.* FROM (SELECT IDPartner, IIF(ISNULL(PartnerFirstName),'',PartnerFirstName) as PartnerFirstName, IIF(ISNULL(PartnerLastName), '', PartnerLastName) AS PartnerLastName, IIF(ISNULL(Organization), '', Organization) AS Organization, " & _
"Address1, City, State, Zip, Country, Active " & _
"FROM tblPartner) q " & _
"WHERE q.IDPartner like '%" & txtPartnerID.Text & "%' AND " & _
" q.PartnerFirstName like '%" & txtFirstName.Text & "%' AND " & _
" q.PartnerLastName like '%" & txtLastName.Text & "%' AND " & _
" q.Organization like '%" & txtOrganization.Text & "%' AND " & _
" q.Address1 like '%" & txtStreet.Text & "%' AND " & _
" q.City like '%" & txtCity.Text & "%' AND " & _
" q.State like '%" & txtState.Text & "%' AND " & _
" q.Zip like '%" & txtZipCode.Text & "%' AND " & _
" q.Country like '%" & txtCountry.Text & "%' " & _
"ORDER BY q.IDPartner, q.partnerlastname, q.partnerfirstname", cn)
感谢大家的帮助和建议,我从这几个建议中学到了很多,真的很感激!
我已经通过返回 Access 解决了问题。我 运行 对任何 NULL 字段进行更新查询并将其更改为“”。如此简单的解决方案!
如果我没有适当的 WHERE 要求,那么我这样做就不会那么重要了。
我一直在尝试修复这个错误,并且已经纠结了太久。我用 Google 搜索了很多次并搜索了这个网站,但似乎无法找到适合我的正确答案,尽管这个问题有很多不同的变体。
我正在使用 VB.Net 和后端的 Access 数据库编写前端 GUI。该数据库在我的合作伙伴 Table 中的 PartnerFirstName
、PartnerLastName
和 Organization
中具有 NULL 值。我将这些加载到我的应用程序中的数据表中,以便用户可以搜索它们。我上周才发现一些合作伙伴(具有 NULL 值的合作伙伴)没有加载。
代码如下:
("SELECT IDPartner, IIF(ISNULL(PartnerFirstName),'',PartnerFirstName) as PartnerFirstName, IIF(ISNULL(PartnerLastName), '', PartnerLastName) AS PartnerLastName, IIF(ISNULL(Organization), '', Organization) AS Organization, " & _
"Address1, City, State, Zip, Country, Active " & _
"FROM tblPartner " & _
"WHERE IDPartner like '%" & txtPartnerID.Text & "%' AND " & _
" PartnerFirstName like '%" & txtFirstName.Text & "%' AND " & _
" PartnerLastName like '%" & txtLastName.Text & "%' AND " & _
" Organization like '%" & txtOrganization.Text & "%' AND " & _
" Address1 like '%" & txtStreet.Text & "%' AND " & _
" City like '%" & txtCity.Text & "%' AND " & _
" State like '%" & txtState.Text & "%' AND " & _
" Zip like '%" & txtZipCode.Text & "%' AND " & _
" Country like '%" & txtCountry.Text & "%' " & _
"ORDER BY IDPartner, partnerlastname, partnerfirstname", cn)
like
的原因是因为我希望搜索根据表单的文本框值实时更新。这是我的问题的根源,因为默认情况下它们是空白并且数据库有空值。
===================
编辑:
感谢最初的评论。我现在意识到我使用了不正确的功能。 Baro 建议的 IIF 让我现在通过了 SQL,这太棒了!
我遇到的记录未显示问题似乎出在我的 WHERE 子句中。如果我删除它,那么所有记录都会加载到我的数据表中。当我如图所示包含 Where 子句时,记录将排除 NULL 值。
我曾尝试使用 OR PartnerFirstName IS NULL
(以及其他字段),但这会留下太多额外的结果,这些结果也有 NULL 值。现在我不知道该怎么做才能允许搜索,因为我知道问题出在语句的 Where 部分。
问题是 WHERE
谓词针对的是原始字段,该字段尚未应用 IIF(ISNULL(...))
表达式。
很难看到,因为您已将 SELECT
语句中的字段别名设置为与基础字段同名。因此,查询正在执行您指示它执行的操作,尽管不是您希望它执行的操作。
为了解决这个问题,我会使用一个子查询将 NULL
值转换为空字符串,然后在外部查询中添加您的 WHERE
谓词。像下面这样的东西应该可以解决问题:
("SELECT q.* FROM (SELECT IDPartner, IIF(ISNULL(PartnerFirstName),'',PartnerFirstName) as PartnerFirstName, IIF(ISNULL(PartnerLastName), '', PartnerLastName) AS PartnerLastName, IIF(ISNULL(Organization), '', Organization) AS Organization, " & _
"Address1, City, State, Zip, Country, Active " & _
"FROM tblPartner) q " & _
"WHERE q.IDPartner like '%" & txtPartnerID.Text & "%' AND " & _
" q.PartnerFirstName like '%" & txtFirstName.Text & "%' AND " & _
" q.PartnerLastName like '%" & txtLastName.Text & "%' AND " & _
" q.Organization like '%" & txtOrganization.Text & "%' AND " & _
" q.Address1 like '%" & txtStreet.Text & "%' AND " & _
" q.City like '%" & txtCity.Text & "%' AND " & _
" q.State like '%" & txtState.Text & "%' AND " & _
" q.Zip like '%" & txtZipCode.Text & "%' AND " & _
" q.Country like '%" & txtCountry.Text & "%' " & _
"ORDER BY q.IDPartner, q.partnerlastname, q.partnerfirstname", cn)
感谢大家的帮助和建议,我从这几个建议中学到了很多,真的很感激!
我已经通过返回 Access 解决了问题。我 运行 对任何 NULL 字段进行更新查询并将其更改为“”。如此简单的解决方案!
如果我没有适当的 WHERE 要求,那么我这样做就不会那么重要了。