2014-02-21 33 views
0

這是我的SqlDataSource通行證,而不是= NULL

<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> 

現在我想的是,當客戶端ID爲空,那麼它應該與客戶端ID = NULL返回所有的行,但空當我看在通過查詢探查器我得到這個。

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

,但它只會返回值如果

clientid is NULL 

正如我有ConvertEmptyStringToNull =「真」命令執行,但返回空數據集。

+0

不知道我理解這個問題....'null'和'NULL'是在T-SQL一樣的東西,我所知道的。分析器只是簡單化所有關鍵字。 – Tim

回答

1

UPDATE:

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

這是假設clientID的永遠不會是-1在數據庫中。

+0

'NULLIF'?我可能期望'ISNULL'或'COALESCE'和使用其他不存在的ID值,但'NULLIF'讓我感到驚訝。這裏有什麼想法? –

+0

@Damien_The_Unbeliever,你是對的,它應該是'ISNULL'而不是'NULLIF'。我更新了我的帖子。 – jacqijvv

+0

@Damien_The_Unbeliever,我的代碼不會和你的答案一樣嗎?如果沒有,請你解釋一下爲什麼使用你的方法而不是我的方法會更好? – jacqijvv

0

既然你有過SELECT命令完全控制,我還以爲:

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

會爲你工作。

0

這應該工作

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