VS2010,
.NET2.0
System.Data2.0.0
SQL SERVER2005
WIN2003 Server
使用vb.NET编写了一个CLR函数,成功部署进了SQL2005数据库,运行一直良好,但最近发现一个很奇怪的问题,跟踪之后发现如下问题:
我们用
_DataSource.Tables("DataSource").Select(sql)
来返回Datarow集合._Datasource是一个DataSet,包含一个"DataSource"的DataTable,_DataSource.Tables("DataSource")的数据是
rowid='BAE936EC-E89E-43C0-945C-90883A621BCD'
TaxType='无证店'
PackageType='新入网存费送机'
三个字段的类型都是String,其中rowid是主键
但当sql为下面的代码时返回了1行数据(为浏览方便用回车符分隔了代码,实际代码中没有回车符)
ISNULL(TaxType,'') not In('小规模纳税人')
AND ISNULL(PackageType,'') not In('老客户存费续网送机','新入网存费送机','老客户自备机续网')
AND rowid ='BAE936EC-E89E-43C0-945C-90883A621BCD'
但当我调整sql中条件的顺序时却返回0行
rowid ='BAE936EC-E89E-43C0-945C-90883A621BCD'
AND ISNULL(TaxType,'') not In('小规模纳税人')
AND ISNULL(PackageType,'') not In('老客户存费续网送机','新入网存费送机','老客户自备机续网')
或者我删除三个条件中的任何一个条件也是能返回正确的结果.
sql中字段的大小写与数据中的字段完全一致.用不用ISNULL函数结果不变.
请问因sql条件顺序不同造成的结果不同是怎样产生的?
并且如何解决这个奇怪的问题?(不通过调整sql逻辑的顺序)
------解决方案--------------------
关键在于你的AND前后是否有空格
a__and__b
------解决方案--------------------
(ISNULL(TaxType,'') not In('小规模纳税人'))
AND (ISNULL(PackageType,'') not In('老客户存费续网送机','新入网存费送机','老客户自备机续网'))
AND (rowid ='BAE936EC-E89E-43C0-945C-90883A621BCD')
这样咧