我有一個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