-按条件查询Test表信息
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
if exists (select * from dbo.sysobjects where 
id = object_id(N'[dbo].[proc_GetTestInfoByCondition]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[proc_GetTestInfoByCondition]
GO
create  proc   [proc_GetTestInfoByCondition]
(
@id  char(12),
@name varchar(10),
@date datetime   
)
as
declare @sql nvarchar(1024),@tdate nvarchar(20),@tname nvarchar(10)
set @sql='select * from test_info where 1=1 '
set @tdate=convert(nvarchar(20),@date)
if @id<>''
begin
set @sql=@sql+'and id='''+@id+''''
end
if @name<>''
begin
set @sql=@sql+'and name='''+@name+''''
end
if @tdate<>''
begin
set @sql=@sql+'and date='''+@tdate+''''
end
print @sql
exec sp_executesql @sql
go
--exec [proc_GetTestInfoByCondition] '','123',''
--select * from test_info where name='admin' 
只要加上时间字符串就不行 不能查出记录 这是为什么

解决方案 »

  1.   

    你把SQL打印出来看一下不就知道那里错了
      

  2.   

    print @sql
    --exec sp_executesql @sql
    看看语句
    @tdate值
      

  3.   


    测试的时候不能用 print @sql
    exec sp_executesql @sql
    exec [proc_GetTestInfoByCondition] '','123',''
    只能
    exec [proc_GetTestInfoByCondition] '','123',''
    直接出结果 所以不知道该怎么样打印sql语句
      

  4.   

    直接把你用ASP函数取到的时间写进库里就可以了~~
    请参阅
    DateDiff 函数 | DatePart 函数
      

  5.   

    先不要用等号,用like调试调试。
      

  6.   


    print @sql
    --exec sp_executesql @sql
    看看语句
    @tdate值关键还是不会输出sql语句
      

  7.   

    应该是@date的类型和数据库里的不一样,所以比较不了
      

  8.   

    set @tdate=convert(nvarchar(20),@date)
    ==>
    set @tdate=convert(nvarchar(20),@date,23)
           set @sql=@sql+'and name='''+@name+''''
    为什么要'''呢?给你例子:create procedure [dbo].[ProcForPager](@p_PageStart int,@p_PageEnd int,@p_SqlSelect nvarchar(4000),@p_OrderBy nvarchar(4000))
    as
    begin
    declare @sqls nvarchar(4000)
    set @sqls=N'SELECT * FROM (SELECT tt.*,Row_Number() over('+@p_OrderBy+') as rownum from ('+@p_SqlSelect+') tt) Where rownum between '+@p_PageStart+' and '+@p_PageEnd;
    exec sp_executesql @sqls
    end;
      

  9.   

    有可能日期为空,@tdate is null
      

  10.   

    拼接SQL语句的时候 加号两端一定要留空格
      

  11.   

    时间字符串的格式是: 'yyyy-MM-dd', 比如'2010-05-25'
      

  12.   


    是的,我写的store procedures传入时间都是用这种格式,从来没有出错过
      

  13.   

    date='''+@tdate+''''
    問題:@tdate 你傳的值是多少? 記住你這個@tdate是匹配到了時分的。數據庫是否有這樣的值
      

  14.   


    数据库里的时间是自动默认认的 GetDate()如果我想把时间的参数变成  yyyy-MM-dd 存储过程应该怎样处理?
      

  15.   

    SET @sql = @sql + ' and date=' + QUOTENAME(@tdate,'''')