我使用帶有高級服務的SQL Server 2008 Express。我有一個看法:具有多個選項的搜索數據庫
IF EXISTS (select * from sys.views where object_id = object_id(N'[dbo].[vw_PersonDetails]'))
DROP VIEW vw_PersonDetails
GO
CREATE VIEW vw_PersonDetails
AS
SELECT
p.PersonID, p.Title,
p.FirstName, p.LastName,
a.AddressLine1, a.AddressLine2, a.AddressLine3, a.AddressLine4,
a.Country, a.PostalCode,
a.PhoneNumber, a.Email, p.EntryDate
FROM
[dbo].[Persons] p
INNER JOIN
[dbo].[Address] a ON p.PersonID = a.PersonID
GO
現在我必須搜索這個視圖與每個列作爲選項。
例:
IF (@firstName != NULL OR @firstName != '') AND
(@lastName != NULL OR @lastName != '') AND
(@addressLine1 != NULL OR @addressLine1 != '') AND
(@postalCode != NULL OR @postalCode != '') AND
(@country != NULL OR @country != '') AND
(@phoneNumber != NULL OR @phoneNumber != '') AND
(@email != NULL OR @email != '') AND
(@entryDate != NULL)
BEGIN
SELECT *
FROM dbo.vw_PersonDetails
WHERE
(FirstName LIKE [dbo].[GetSearchString](@firstName) OR
LastName LIKE [dbo].[GetSearchString](@lastName) OR
AddressLine1 LIKE [dbo].[GetSearchString](@addressLine1) OR
Country LIKE [dbo].[GetSearchString](@country) OR
PostalCode LIKE [dbo].[GetSearchString](@postalCode) OR
PhoneNumber LIKE [dbo].[GetSearchString](@phoneNumber) OR
Email LIKE [dbo].[GetSearchString](@email) OR
EntryDate = @entryDate
)
END
現在有沒有除了寫一個永不落幕的IF-ELSE-IF線索在存儲過程或建築物查詢動態任何其他選項。請幫忙。
另一個問題是,什麼會更好:編寫這樣的存儲過程或從代碼進行動態查詢。
在此先感謝。
非常棘手和直觀的解決方案。謝謝@Parkyprg。 –