Pass为NULL而不是= Null

时间:2014-02-21 07:38:17

标签: asp.net sql sql-server visual-studio-2012 sqldatasource

这是我的sqldatasource

   <asp:SqlDataSource runat="server" ID="get_client_users" ConnectionString="<%$ ConnectionStrings:local %>" SelectCommand="SELECT *  FROM users WHERE clientid = @clientid" CancelSelectOnNullParameter="False">
    <SelectParameters>
        <asp:Parameter Name="clientid" Type="Int32"  ConvertEmptyStringToNull="true"/>
    </SelectParameters>
   </asp:SqlDataSource>

现在我想要的是,当clientid为null时,它应该返回clientid = null的所有行,但是当我看到在profiler中传递的查询时,我得到了这个。

exec sp_executesql N'SELECT *  FROM users WHERE clientid = @clientid',N'@clientid int',@clientid=NULL

但它只返回值

clientid is NULL

因为我正在执行ConvertEmptyStringToNull =“true”命令,但返回空数据集。

4 个答案:

答案 0 :(得分:1)

<强>更新

SELECT *
FROM users 
WHERE ISNULL(clientID, -1) = ISNULL(@ClientID, -1)

这假设clientID在数据库中永远不会是-1。

答案 1 :(得分:0)

由于您可以完全控制SELECT命令,我想:

SELECT *  FROM users
WHERE clientid = @clientid OR
      (@clientid is null and clientid is null)

适合你。

答案 2 :(得分:0)

你可以尝试,

@ClientID IS NULL OR ClientID=@ClientID

答案 3 :(得分:0)

这应该有效

SELECT *
FROM users 
WHERE clientID = ISNULL(@ClientID, clientID)