关于一个SQL语句的问题

bengdeng 2005-09-02 02:59:18
select * from qinggou,dingdan where qinggou.a=dingdan.a 我要加一个条件,dingdan表的b字段值要么是空值,要么是NULL值,请问该怎么写?
我试了 select * from qinggou,dingdan where qinggou.a=dingdan.a and ((dingdan.b = @b) OR (dingdan.b = @b1)) ,我给@b赋值的是"",@b1赋值的是DBNull.Value ,但是结果只显示b字段是""的项!
如果我写的SQL语句是select * from qinggou,dingdan where qinggou.a=dingdan.a and dingdan.b = @b,而给@b赋的值是DBNull.Value ,则无法输出任何值!
请问该怎么做?
...全文
110 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
luoxia001 2005-09-02
  • 打赏
  • 举报
回复
-_-
luoxia001 2005-09-02
  • 打赏
  • 举报
回复
把我写的sql语句放在查询分析器里运行
你就知道有没问题了
不关c#也不关asp.net的问题

select * from qinggou as a
inner join
dingdan as b
on a.a=b.a
where b.b = '' or b.b is null
bengdeng 2005-09-02
  • 打赏
  • 举报
回复
好了,谢谢大家,好奇怪,以前也试过直接在select语句中写is null有错误,今天试了居然可以了^_^
luoxia001 2005-09-02
  • 打赏
  • 举报
回复
is null是sql语句。。。
不是C#的
bengdeng 2005-09-02
  • 打赏
  • 举报
回复
是sql server 数据库,在asp.net中用is null应该不对,我是用C#编
mathsword 2005-09-02
  • 打赏
  • 举报
回复
查了查SQL Server文档,发现Null值的比较运算,存在两种规则:
在SQL2000中Null值的比较运算有两种规则。一种是ANSI SQL(SQL-92)规定的Null值的比较取值结果都为False,既Null=Null取值也是False。另一种不准循ANSI SQL标准,即Null=Null为True。
以一张表T的查询为例。

表T存在下面的数据:
RowId Data
--------------
1 'test'
2 Null
3 'test1'

按照ANSI SQL标准,下面的两个查询都不返回任何行:
Query1: select * from T where Data=null
Query2: select * from T where Data<>null
而按照非ANSI SQL标准,查询1将返回第二行,查询2返回1、3行。
ANSI SQL标准中取得Null值的行需要用下面的查询:
select * from T where Data is null
反之则用is not null。由此可见非ANSI SQL标准中Data=Null等同于Data Is Null,Data<>Null等同于Data Is Not Null。

而控制采用那一种规则,需要使用命令SET ANSI_NULLS [ON/OFF]。ON值采用ANSI SQL标准,OFF值采用非标准模式。另外SET ANSI_DEFAULTS [ON/OFF]命令也可以实现标准的切换,只是这个命令控制的是一组符合SQL-92标准的设置,其中就包括Null值的标准。

默认情况下,数据库管理程序(DB-Library)是SET ANSI_NULLS为OFF的。但是我们的大多数应用程序,都是通过ODBC或者OLEDB来访问数据库的,作为一种开放兼容的数据库访问程序,或许是兼容性的考虑,SET ANSI_NULLS值设置为ON。这样一来带来的一些问题是需要注意的。像存储过程或者自定义函数这样的应用程序都是基于DB-Library的,默认情况下,SET ANSI_NULLS为OFF,并且在这样的程序中,不能使用SET ANSI_NULLS在一个环境中修改规则,只能修改数据库配置参数
jinjazz 2005-09-02
  • 打赏
  • 举报
回复
null 不等于任何值,包括null自己

if null=null
print '='
else
print '<>'
输出的是<>
mathsword 2005-09-02
  • 打赏
  • 举报
回复
你是什么数据库?sql server ?oracle
luoxia001 2005-09-02
  • 打赏
  • 举报
回复
select * from qinggou as a
inner join
dingdan as b
on a.a=b.a
where b.b = '' or b.b is null
mathsword 2005-09-02
  • 打赏
  • 举报
回复
好像是is null
luoxia001 2005-09-02
  • 打赏
  • 举报
回复
select * from qinggou as a
inner join
dingdan as b
on a.a=b.a
where b.b = '' or b.b is null
luoxia001 2005-09-02
  • 打赏
  • 举报
回复
下面的写法比较标准
select * from qinggou as a
inner join
dingdan as b
on a.a=b.a
bengdeng 2005-09-02
  • 打赏
  • 举报
回复
没用过。。可以不要用存储过程吗?
GDNPC 2005-09-02
  • 打赏
  • 举报
回复
你用存储过程吗?如果是,那你可以试一试在存储过程里定义@b但不要赋予它任何值
declare @b char(1)

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧