在传统的ASP运行T-SQL查询没有返回NULL记录
问题描述:
我有一个ASP经典网页下面的脚本连接到MS SQL 2012:在传统的ASP运行T-SQL查询没有返回NULL记录
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.RecordSet")
Conn.Open SQLCFG
RS.CacheSize = 40
RS.Open "SELECT * FROM orders WHERE (final_trackingnumber = '' OR final_trackingnumber = NULL OR final_trackingnumber LIKE '%BACK%') AND status <> 'pp' ORDER BY dt DESC", Conn, adOpenKeyset,adLockReadOnly
%>
<table width="100%" cellpadding=7>
<tr>
<td class='theading'></td>
<td class='theading'>Invoice Number</td>
<td class='theading'>Billed to</td>
<td class='theading'>Date Ordered</td>
<td class='theading'>Shipping Type</td>
<td class='theading'>Tracking ID</td>
<td class='theading'>Status</td>
</tr>
<tr>
<%
Do While Not RS.EOF
%>
<tr>
<td align=center bgcolor="<%=bcolor%>" class="trow"><font face="arial" size=2><a href="process-view.asp?aid=<%=RS("aid")%>&oid=<%=RS("oid")%>"><B>View Order</b></A></td>
<td bgcolor="<%=bcolor%>" class="trow"><%= RS("oid") %></td>
<td bgcolor="<%=bcolor%>" class="trow"><%= RS("b_name") %></td>
<td bgcolor="<%=bcolor%>" class="trow"><%= RS("dt") %></td>
<td bgcolor="<%=bcolor%>" class="trow"><%= RS("shippingtype") %></td>
<td bgcolor="<%=bcolor%>" class="trow"><%= RS("final_trackingnumber") %></td>
<td bgcolor="<%=bcolor%>" class="trow"></td>
</tr>
<%
RS.MoveNext
Loop
%>
</table>
<%
Rs.Close
Conn.Close
%>
我可以查询到在MS SQL管理正常运行工作室,但是当我在ASP页面上运行它时,我不返回任何具有“final_trackingnumber = NULL”的记录。在查询中需要返回列中有NULL的记录吗?下面的建议声明我需要使用final_trackingnumber IS NULL,但ADO不支持这一点。
答
它必须是“为空”,如下
final_trackingnumber is NULL
答
在TSQL,或检查时,如果值为NULL不,你不能使用=
或<>
比较操作。他们将始终返回一个不真实的值(未知或错误)。
这最好的计算策略是myColumn IS NULL
同样,如果你所检查的一些列不等于值一定要检查NULL以及
WHERE (myValue IS NOT NULL) AND (myValue <> someOtherValue)
我也尝试以前和脚本将无法运行。我尝试了一个非常简单的查询:'code' RS.Open“SELECT * FROM orders WHERE final_trackingnumber is NULL ORDER BY dt DESC”,Conn,adOpenKeyset,adLockReadOnly'code'。我怀疑这可能是格式化查询ADO的问题?我得到的唯一错误是“页面无法显示,因为发生了内部服务器错误” –