2014-02-21 4 views
0

Это мой SqlDataSourceПасс NULL вместо = 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> 

Теперь я хочу, что когда ClientID равна нулю, то он должен вернуть все строки с ClientId = 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' NOT' NULLIF'. Я обновил свой пост. – jacqijvv

+0

@Damien_The_Unbeliever, не будет ли мой код делать то же самое, что и в вашем ответе? Если нет, можете ли вы объяснить, почему было бы лучше использовать ваш подход, а не мой? – jacqijvv

0

Поскольку у вас есть полный контроль над командой SELECT, я бы подумал:

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

будет работать для вас.

0

Вы можете попробовать,

@ClientID IS NULL OR [email protected] 
+0

Это приведет к возврату значений всех строк, когда clientid равно null – Nik

0

Это должно работать

SELECT * 
FROM users 
WHERE clientID = ISNULL(@ClientID, clientID) 
Смежные вопросы