<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sybase数据库技术，数据库恢复专家 &#187; ansinull</title>
	<atom:link href="http://www.dbainfo.net/tag/ansinull/feed" rel="self" type="application/rss+xml" />
	<link>https://www.dbainfo.net</link>
	<description>提供Sybase ASE及Sybase SQL Anywhere数据库修复服务，电话：13811580958(微信)，QQ：289965371！We have many years of experience in recovering data from damanged Sybase devices. Contact us by Phone: +86 13811580958 Wechat: 13811580958 Email: 289965371@qq.com</description>
	<lastBuildDate>Sat, 14 Jun 2025 16:28:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Sybase ASE 中null is null的处理结果是什么？</title>
		<link>https://www.dbainfo.net/sybase-ase-null-is-null.htm</link>
		<comments>https://www.dbainfo.net/sybase-ase-null-is-null.htm#comments</comments>
		<pubDate>Thu, 29 Mar 2012 12:44:27 +0000</pubDate>
		<dc:creator>dbainfo</dc:creator>
				<category><![CDATA[Sybase ASE]]></category>
		<category><![CDATA[ansinull]]></category>
		<category><![CDATA[ASE]]></category>
		<category><![CDATA[ASE V15.0.3]]></category>

		<guid isPermaLink="false">http://www.dbainfo.net/?p=1893</guid>
		<description><![CDATA[Sybase ASE对null is null的处理结果是什么呢？ 下面的SQL语句会返回所有的对象名吗？ select name from sysobjects where type=null or null is null 答案是：根据ASE版本不同，结果也不同。 在ASE v15.0.3之前的版本中会报下面的错误： Invalid operator for datatype op: is null type: VOID TYPE. 在v15.0.3及以后的版本中，对is null的处理结果和我们平时直观的想法相同， 上面SQL语句会返回所有的对象名称。 原因在于ASE判断是否为空时的处理方式。ASE处理 值 is null 这个表达式时， 会先将null值转化成欲比较的值所对应的数据类型；因此，在处理 NULL is null时， 会先将null值转化成欲比较的值（NULL）所对应的数据类型，而值（NULL）对应的数据 类型是未知的。于是，报错：VOID TYPE。 在v15.0.3及更高版本中，解决了报错的问题，能够按照我们平时的习惯正常处理null is null 但是，请慎用null is null这种用法。比较经典的一个应用为，在java程序中有如下SQL语句： select id from sysobjects where name=? [...]]]></description>
			<content:encoded><![CDATA[<p>Sybase ASE对null is null的处理结果是什么呢？<br />
	下面的SQL语句会返回所有的对象名吗？<br />
	select name from sysobjects where type=null or null is null<br />
	<strong>答案是：</strong>根据ASE版本不同，结果也不同。</p>
<p>	在ASE v15.0.3之前的版本中会报下面的错误：<br />
	<strong><span style="color:#f00;">Invalid operator for datatype op: is null type: VOID TYPE.</span></strong><br />
	在v15.0.3及以后的版本中，对is null的处理结果和我们平时直观的想法相同，<br />
	上面SQL语句会返回所有的对象名称。<br />
	<span id="more-1893"></span><br />
	<strong>原因</strong>在于ASE判断是否为空时的处理方式。ASE处理 值 is null 这个表达式时，<br />
	会先将null值转化成欲比较的值所对应的数据类型；因此，在处理 NULL is null时，<br />
	会先将null值转化成欲比较的值（NULL）所对应的数据类型，而值（NULL）对应的数据<br />
	类型是未知的。于是，报错：VOID TYPE。</p>
<p>	在v15.0.3及更高版本中，解决了报错的问题，能够按照我们平时的习惯正常处理null is null<br />
	但是，请慎用null is null这种用法。比较经典的一个应用为，在java程序中有如下SQL语句：<br />
	select id from sysobjects where name=? or ? is null<br />
	如果该SQL接收到传入的非空对象名称，那么会返回其对应的对象ID。 如果该SQL没有接收到参数，<br />
	也就是传入空的对象名称，则返回所有的对象ID。<br />
	为了适用ASE多个版本，请将以上SQL修改为：<br />
	<strong>select id from sysobjects where name=? or isnull(?,&#39;&#39;) = &#39;&#39;</strong></p>
<p>	-----------------------------------------------------------<br />
	<span style="font-size:14px;">ASE中 is null与=null是相等的吗？</span><br />
	<strong>答案是肯定的。</strong><br />
	ASE中判断一个表达式是否为空，使用is null 或者 = null都是可以的。 <br />
	但是，在SQL Standard中，is null与 =null的处理结果是不同的。 <br />
	SQL标准中，判断一个表达式是否为空，需要使用is null。 null也就是空，所代表的值是未知的，<br />
	那么用未知的值(NULL)与未知的值(NULL)进行比较，结果怎么会可知呢？<br />
	然后，ASE默认情况下会给你一个可知的结果。 就是： is null 相当于 =null <br />
	在ASE中将ansinull选项打开，则处理方式与SQL标准相同了。</p>
<p>	请看下面的例子：</p>
<p>	默认情况下ansinull是关闭的，<br />
	1&gt; select * from t<br />
	2&gt; go<br />
	&nbsp;id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name<br />
	&nbsp;----------- ------------------------------<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 NULL</p>
<p>	(1 row affected)<br />
	1&gt; select @@options<br />
	2&gt; go</p>
<p>	&nbsp;--------------------------<br />
	&nbsp;0x80210000000f034403001000</p>
<p>	(1 row affected)<br />
	1&gt; select * from t where name is null<br />
	2&gt; go<br />
	&nbsp;id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name<br />
	&nbsp;----------- ------------------------------<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>&nbsp;&nbsp;&nbsp; 1 NULL</strong></p>
<p>	(1 row affected)<br />
	1&gt; select * from t where name=null<br />
	2&gt; go<br />
	&nbsp;id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name<br />
	&nbsp;----------- ------------------------------<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>&nbsp; 1 NULL</strong></p>
<p>	(1 row affected)<br />
	将选项ansinull打开后，<br />
	1&gt; set ansinull on<br />
	2&gt; go<br />
	1&gt; select @@options<br />
	2&gt; go</p>
<p>	&nbsp;--------------------------<br />
	&nbsp;0x80210000020f034403001000</p>
<p>	(1 row affected)<br />
	1&gt; select * from t where name is null<br />
	2&gt; go<br />
	&nbsp;id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name<br />
	&nbsp;----------- ------------------------------<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>1 NULL</strong></p>
<p>	(1 row affected)<br />
	<strong>1&gt; select * from t where name=null<br />
	2&gt; go<br />
	&nbsp;id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name<br />
	&nbsp;----------- ------------------------------</p>
<p>	(0 rows affected)</strong></p>
<p>	注意比较全局环境变量</p>
<p>0x80210000000f034403001000 和</p>
<p>0x80210000020f034403001000</p>
<p>是设置ansinull前后的会话选项值。</p>
<p><span style="font-size:14px;"><strong><br />
	参考文章：</strong></span></p>
<p>NULLs in Sybase ASE ： <a href="http://sybasease.blogspot.com/2005/05/nulls-in-sybase-ase.html" target="_blank">http://sybasease.blogspot.com/2005/05/nulls-in-sybase-ase.html</a></p>
<p><a href="http://www.dbtalk.net/sybase-public-ase-general/ase-12-5-2-invalid-270535.html" target="_blank">ASE 12.5.2 - Invalid operator for datatype op: is null type: VOID TYPE<br />
	</a></p>
<p><span style="font-size:14px;"><strong>总结：<br />
	</strong></span></p>
<p>null is null在ASE v15.0.3前的版本中是不能使用的，在ASE v15.0.3以后续版本可以使用。</p>
<p>null = null在ASE v15.0.3之前的版本中不能使用，在ASE v15.0.3 ESD#1 和 ASE v15.0.3 ESD#2上面可以使用，但是在ASE v15.0.3 ESD#4还有ASE v15.7上面不能使用。</p>
<p>以上是我亲自测试的结果。 不对之处，欢迎指正！</p>
<div style="clear: both; margin: 10px 0pt; border: 1px dashed rgb(153, 153, 153); font-size: 12px; padding: 5px 10px;">
<li>本文链接地址：<a href="https://www.dbainfo.net/sybase-ase-null-is-null.htm">https://www.dbainfo.net/sybase-ase-null-is-null.htm</a>；</li>
<li>本文为dbainfo个人原创，请在尊重作者劳动成果的前提下进行转载；</li>
<li>转载务必注明原始出处 : <a href="https://www.dbainfo.net/">Sybase数据库技术，数据库恢复专家</a>；</li>
<li>对《<a href="https://www.dbainfo.net/sybase-ase-null-is-null.htm">Sybase ASE 中null is null的处理结果是什么？</a>》有何疑问或见解，请在本文下方发表；</li>
<li>对网站还有其他问题或建议，请提交在<a href="https://www.dbainfo.net/messages" target="_blank">留言板</a>，谢谢！</li>
</div>
<h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>2015-01-16 -- <a href="https://www.dbainfo.net/one-way-to-recover-master-configuration-area.htm" title="master数据库配置区域(configuration area)损坏的一种修复方法">master数据库配置区域(configuration area)损坏的一种修复方法</a> (1)</li><li>2013-11-11 -- <a href="https://www.dbainfo.net/ase-15-0-3-for-windows-installation5.htm" title="Sybase ASE 15.0.3 for windows平台安装文档 – 5、安装后的配置工作">Sybase ASE 15.0.3 for windows平台安装文档 – 5、安装后的配置工作</a> (1)</li><li>2013-11-11 -- <a href="https://www.dbainfo.net/ase-15-0-3-for-windows-installation4.htm" title="Sybase ASE 15.0.3 for windows平台安装文档 – 4、安装Sybase数据库服务">Sybase ASE 15.0.3 for windows平台安装文档 – 4、安装Sybase数据库服务</a> (0)</li><li>2013-11-11 -- <a href="https://www.dbainfo.net/ase-15-0-3-for-windows-installation3.htm" title="Sybase ASE 15.0.3 for windows平台安装文档 – 3、升级到 Sybase 15.0.3 ESD #3">Sybase ASE 15.0.3 for windows平台安装文档 – 3、升级到 Sybase 15.0.3 ESD #3</a> (0)</li><li>2013-11-11 -- <a href="https://www.dbainfo.net/ase-15-0-3-for-windows-installation2.htm" title="Sybase ASE 15.0.3 for windows平台安装文档 – 2、安装Sybase ASE程序">Sybase ASE 15.0.3 for windows平台安装文档 – 2、安装Sybase ASE程序</a> (0)</li><li>2013-11-11 -- <a href="https://www.dbainfo.net/ase-15-0-3-for-windows-installation1.htm" title="Sybase ASE 15.0.3 for windows平台安装文档 – 1、安装前的准备工作">Sybase ASE 15.0.3 for windows平台安装文档 – 1、安装前的准备工作</a> (1)</li><li>2013-10-15 -- <a href="https://www.dbainfo.net/ase-xml-introduction.htm" title="ASE中xml服务使用方法简介">ASE中xml服务使用方法简介</a> (0)</li><li>2013-09-16 -- <a href="https://www.dbainfo.net/select-random-rows-from-table.htm" title="ASE从表中随机选择数据的三种方法">ASE从表中随机选择数据的三种方法</a> (0)</li><li>2013-09-08 -- <a href="https://www.dbainfo.net/get-current-running-sql.htm" title="查看ASE v15正在执行的SQL语句内容">查看ASE v15正在执行的SQL语句内容</a> (0)</li><li>2012-11-14 -- <a href="https://www.dbainfo.net/sybase-ase-job-scheduler-schedule-jobs.htm" title="在Sybase ASE上利用job scheduler定时调度作业">在Sybase ASE上利用job scheduler定时调度作业</a> (7)</li></ul>]]></content:encoded>
			<wfw:commentRss>https://www.dbainfo.net/sybase-ase-null-is-null.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
