2010-09-14 48 views
0

我有SP,从表中有两列这样SQL和空选择值

@param1 text, 
@param2 text 
Select * from tablle1 where field1 like @param1 and field2 like @param2 

但是选择数据,因为有时Filed2为空我不得不这样做,否则查询返回任何

@param1 text, 
@param2 text 
Select * from tablle1 where field1 like @param1 and (field2 like @param2 OR field2 IS NULL) 

我的问题是,如果我现在尝试运行与@param2@param1值和“%”我从表中的所有行的SP

我怎样才能在任何情况下做到这一点? 我打算在asp.net网站的搜索表单中使用这个SP,并为用户提供在搜索中使用'%'的选项(最终会有更多的字段可供搜索,并且每个字段都会有一个文本框默认为“%”)

+0

为什么哦为什么你做一个关键码可为空? – sheeks06 2010-09-14 09:44:16

+0

我没有说任何地方,它是一个关键 – Iulian 2010-09-14 09:47:10

回答

2

试试这个

@param1 text, 
@param2 text 
Select * from tablle1 where field1 like @param1 and isnull(field2,@param2) like @param2 
or 
Select * from tablle1 where field1 like @param1 and isnull(field2,'') like @param2 
+0

我用这种方法的问题是,filed2是数字,而@param2是文本(允许传递'%')。我得到的文本与数字错误不兼容。 – Iulian 2010-09-14 09:52:58

+0

@ Iulian-首先使用Cast或Convert函数将字段转换为varchar – 2010-09-14 09:57:22

+0

我已将其更改为'select * from tablle1 where field1 like @ param1 and isnull(field2,0)like @ param2' and it's working,from我的理解是,如果filed2是空的,它会使'0 = @ param2'成为第二个条件? – Iulian 2010-09-14 10:18:27

0

你应该Sommarskogs homepage

看看它的页面是关于这个问题的最佳参考,同时也将解决一些使用此代码可能会遇到的其他问题。