2017-07-17 3 views
0

je le script suivant dans une page ASP classique connecté à MS SQL 2012:requête T-SQL en cours d'exécution sur ASP classique ne retourne pas les enregistrements 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 
%> 

je peux obtenir la requête afin de fonctionner correctement dans la gestion MS SQL studio, mais lorsque je l'exécute sur la page ASP, je ne renvoie aucun enregistrement ayant "final_trackingnumber = NULL". Qu'est-ce qui est requis dans la requête pour renvoyer les enregistrements qui ont la valeur NULL dans une colonne? Les suggestions ci-dessous indiquent que j'ai besoin d'utiliser final_trackingnumber IS NULL, mais cela n'est pas supporté dans ADO.

Répondre

5

Il doit être « est nul » comme ci-dessous

final_trackingnumber is NULL 
+0

J'ai essayé que précédemment et le script ne fonctionnerait pas. J'ai essayé une requête très simple: 'code' RS.Open" SELECT * FROM commandes où final_trackingnumber est NULL ORDER BY dt DESC ", Conn, adOpenKeyset, adLockReadOnly'code'. Je soupçonne que cela pourrait être un problème avec le formatage de la requête pour ADO? La seule erreur que j'obtiens est "La page ne peut pas être affichée parce qu'une erreur de serveur interne s'est produite" –

0

En TSQL, lors de la vérification si une valeur est NULL ou non, vous ne pouvez pas utiliser les = ou <> opérateurs de comparaison. Ils retourneront toujours une valeur non vraie (inconnue ou fausse).

Ce serait le meilleur approch myColumn IS NULL même si vous vérifiez qu'une partie colonne ne correspond pas à une valeur assurez-vous de vérifier NULL et

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