[英]Need help build a dynamic query with Between dates in sql server 2008
我有一个UI,用户可以在其中搜索可选参数。我正在编写SP,并且我正在使用AdventureWorks作为测试数据库。
由于某些原因,我似乎没有找到一种方法来包括
在'''+ @Fromdate +'''和'''+ @ToDate +''''之间的ModifiedDate)
在我现有的SP中可以提供帮助吗?
我的sp看起来像这样
ALTER PROCEDURE SearchPerson_Dynamic
(
@FirstName NVARCHAR(50) = NULL,
@LastName NVARCHAR(50) = NULL,
@EmailAddress NVARCHAR(50) = NULL,
@Phone NVARCHAR(25) = NULL,
@FromDate DATETIME =NULL,
@ToDate DATETIME =NULL
AS
DECLARE @sSQL NVARCHAR(MAX), @Where NVARCHAR(1000) = ''
SET @sSQL = 'SELECT * FROM [Person].[Contact]'
IF @FirstName is not null
SET @Where = @Where + 'AND FirstName = @_FirstName '
IF @LastName is not null
SET @Where = @Where + 'AND LastName = @_LastName '
IF @EmailAddress IS NOT NULL
SET @Where = @Where + 'AND EmailAddress = @_EmailAddress '
IF @Phone IS NOT NULL
SET @Where = @Where + 'AND Phone = @_Phone '
-- NEED TO INTEGRATE A SEARCH BETWEEN @FromDate and @ToDate
IF LEN(@Where) > 0
SET @sSQL = @sSQL + 'WHERE ' + RIGHT(@Where, LEN(@Where)-3)
EXEC sp_executesql @sSQL,
N'@_FirstName VARCHAR(50),
@_LastName VARCHAR(50),
@_EmailAddress VARCHAR(50),
@_Phone NVARCHAR(25)',
@_FirstName = @FirstName,
@_LastName = @LastName,
@_EmailAddress = EmailAddress,
@_Phone = @Phone
MISSING @FROMDate and @ToDate --HOW DO i DO IT HERE
我还没有做的一件事是,用户可以从下拉菜单的UI中选择某些字段EG Surname。 在没有确切参数的情况下如何执行搜索?
再次感谢你的帮助
如果要重写您存储的proc,我将执行以下操作
ALTER PROCEDURE SearchPerson_Dynamic
(
@FirstName NVARCHAR(50) = NULL,
@LastName NVARCHAR(50) = NULL,
@EmailAddress NVARCHAR(50) = NULL,
@Phone NVARCHAR(25) = NULL,
@FromDate DATETIME =NULL,
@ToDate DATETIME =NULL
)
as
begin
SELECT * FROM [Person].[Contact]
where
FirstName = coalesce(@FirstName, FirstName) and
LastName = coalesce(@LastName, LastName) and
EmailAddress = coalesce(@EmailAddress, EmailAddress) and
Phone = coalesce(@Phone, Phone) and
ModifiedDate >= coalesce(@FromDate, FromDate) and
ModifiedDate <= coalesce(@ToDate, ToDate)
end
这样比较好,因为它不执行存储过程的文本,并且可以对其进行优化。
如果要使用动态sql,可以将日期强制转换为普通字符串,即
IF @FromDate IS NOT NULL AND @ToDate IS NOT NULL
SET @Where = @Where + 'AND ModifiedDate between ''' + cast( @FromDate as varchar(50) ) + ''' and ''' + cast( @ToDate as varchar(50) ) + ''' '
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.