Create PROCEDURE [dbo].[SP_GetAll] 
@senddate datetime
AS
declare @strsql nvarchar(1000)
BEGIN
set @strsql='select * from Area where 1=1'
if @senddate is not null
set @strsql=@strsql+'  and senddate>=CONVERT(char(10), @senddate, 120) and senddate<CONVERT(char(10), @senddate+1, 120)'
exec(@strsql)
执行这个存储过程的时候,提示 Must declare the scalar variable "@senddate".
要是把
set @strsql=@strsql+'  and senddate>=CONVERT(char(10), @senddate, 120) and senddate<CONVERT(char(10), @senddate+1, 120)'
改成
set @strsql=@strsql+'  and senddate>='+CONVERT(char(10), @senddate, 120)+' and senddate<'+CONVERT(char(10), @senddate+1, 120)
有查询不到数据(数据中有相应的记录)怎么解决,谢谢。。

解决方案 »

  1.   

    alter PROCEDURE [dbo].[SP_GetAll] 
     @senddate datetime
    AS
    declare @strsql nvarchar(1000)
    BEGIN
      set @strsql='select * from Area where 1=1'
      if @senddate is not null
       set @strsql=@strsql+' and senddate>='''+convert(varchar(10),@senddate,120)+''' and senddate<CONVERT(char(10),dateadd(day,1,'''+convert(varchar(10),@senddate,120)+'''),120)'
      print(@strsql)
    end
    go
      

  2.   

    alter PROCEDURE [dbo].[SP_GetAll] 
     @senddate datetime
    AS
    declare @strsql nvarchar(1000)
    BEGIN
      set @strsql='select * from Area where 1=1'
      if @senddate is not null
       set @strsql=@strsql+' and senddate>='''+convert(varchar(10),@senddate,120)+''' and senddate<CONVERT(char(10),dateadd(day,1,'''+convert(varchar(10),@senddate,120)+'''),120)'
      exec(@strsql)
    end
    go
      

  3.   

    set @strsql='select * from Area where 1=1'
    if @senddate is not null
        set @strsql=@strsql + ' and senddate>= ''' + CONVERT(char(10), @senddate, 120) + ''' and senddate< ''' + CONVERT(char(10), @senddate+1, 120) + ''''