这是我的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”命令,但返回空数据集。
答案 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)