【发布时间】:2011-10-06 15:19:31
【问题描述】:
我使用带有高级服务的 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 跟踪或动态构建查询之外,现在还有其他选择。请帮忙。
另一个问题是什么会更好:编写这样的存储过程或从代码中进行动态查询。
提前致谢。
【问题讨论】:
标签: c# sql sql-server search stored-procedures