我有一个Visual Basic .NET应用程序的搜索屏幕具有文本框:多参数搜索2000
- 名VARCHAR(50)
- 姓VARCHAR(50)
- 中间名VARCHAR(50)
- DOB的DateTime
- 家庭电话VARCHAR(10)
- 工作电话VARCHAR(10)
我将如何在SQL Server 2000中创建一个存储过程,使我能够在所有/某些/某个字段上进行搜索。如果用户只输入姓名和家庭电话号码的数据,那么对于没有输入数据的其余参数,我需要做什么。我尝试了下面的select语句,但它不能正常工作。
Select Last_Name, First_Name, Mid_Name, DOB, Home_Phone, Work_Phone from dbo.tblClient
Where Last_Name Like '%@LastName' and
First_Name Like '%@FirstName' and
Mid_Name Like '%@MiddleName' and
DOB Like '%DOB' and
Home_Phone Like '%@HomePhone' and
Work_Phone Like '%@WorkPhone'
您可能想要翻转您的ORs的顺序,或者在测试存在之前最终执行查找。充其量只会是狗慢。更可能的是,它会简单地抛出。 – 2009-02-10 22:45:34
@Jason:对于@LastName为null表达式变为(Last_Name为Null或Null Is Null),重新排序OR操作数(甚至假定SQL 2000的捷径)几乎是不可能的(忽略语法错误)会有所作为。 – AnthonyWJones 2009-02-10 22:54:58
我不认为SQL真的让我们决定在这种情况下的评估顺序。由于评估变量的成本非常小,因此优化程序会在决定是否将其与列进行比较之前自行评估(将其视为常量)。 – KenJ 2009-02-10 22:55:48