在经典ASP上运行的T-SQL查询不返回NULL记录

时间:2017-07-17 17:44:04

标签: sql-server asp-classic

我在连接到MS SQL 2012的ASP经典页面中有以下脚本:

 <%
 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不支持。

2 个答案:

答案 0 :(得分:5)

必须是&#34;是空的&#34;如下

final_trackingnumber is NULL

答案 1 :(得分:0)

在TSQL中,当检查值是否为NULL时,您无法使用=<>比较运算符。它们总是会返回一个不正确的值(未知或错误)。

如果您检查某些列不等于某个值,那么这个最好的approch也会myColumn IS NULL同时确保检查NULL

WHERE (myValue IS NOT NULL) AND (myValue <> someOtherValue)