create proc Pr_datetimeselect
as 
begin
declare @sql nvarchar(1000);
declare @str nvarchar(1000);
--declare @i int;
--declare @j int;
--set @i=1;
--set @j='select count(*) from dbo.DateTimes';
--while @i>@j
   begin
     set @sql='select  top 1 substring(convert(varchar(100),NowTime,23),0,5) from dbo.DateTimes';
     exec(@sql);
     set @str='select convert(varchar(100),NowTime,23) as times from dbo.DateTimes where NowTime like ''%'+ @sql+'%''';
     exec(@str);
     --set @i=@i+1;
     --break;
   end
end这段代码为什么返回为空勒select convert(varchar(100),NowTime,23) as times from dbo.DateTimes where NowTime like '%2007%' 这段代码就可以

解决方案 »

  1.   

    select convert(varchar(100),NowTime,23) as times from dbo.DateTimes 
    where NowTime like '%2007%'是日期用 year(NowTime)=2007
      

  2.   

    'SQL中获得EXEC后面的sql语句或返回值的方法'前言:在数据库程序开发的过程中,我勱们经常会碰到学习利用EXEC来执行一段需要返回某些值的sql语句(通常是构造动态sql语句时使用),或者在一个HTML存储过程中利用EXEC调用另一个HTML有返回值的存储过程(必须获得返回值),那么如何获得这些返回值呢?
    1.EXEC执行sql语句的情况declare @rsql varchar(250)declare @csql varchar(300)declare @rc nvarchar(500)declare @cstucount intdeclare @ccount intset @rsql='(select Classroom_id from EA_RoomTime where zc='+@zc+' and xq='+@xq+' and T'+@time+'=''否'') and ClassroomType=''1'''--exec(@rsql)set @csql='select @a=sum(teststucount),@b=sum(classcount) from EA_ClassRoom where classroom_id in 'set @rc=@csql+@rsqlexec sp_executesql @rc,N'@a int output,@b int output',@cstucount output,@ccount output--将exec的结果放入变量中的做法--select @csql+@rsql--select @cstucount上面的@rc这个HTMLsql语句的功能是找出特定时间段里所有有空的教室数量以及这些教室所能容纳的学生人数,因为涉及到学习动态的sql语句(@csql这句里条件中有一个HTML列名是动态变化的)的构造,所以要放在exec里执行,但是同时我勱又要返回2个HTML结果,所以执行时的代码为:
    exec sp_executesql @rc,N'@a int output,@b int output',@cstucount output,@ccount output--将exec的结果放入变量中的做法
    这样就将返回值放到学习了,@cstucount,@ccount两个HTML变量中,得到学习了我勱们想要的结果。
    2.exec执行带返回值的存储过程的情况
    我勱们来看一个HTML简单的存储过程:
    create procedure ProTest(@name varchar(10),@money int output)asbeginif(@name='1')set @money=1000elseset @money=2000end这个HTML只是一个HTML简单的示例,这个HTML存储过程返回的是@money 这个HTML参数的值,那么当我勱们在另外一个HTML存储过程中调用此存储过程的时候如何获取这个HTML参数呢,方法如下:
    declare @m int ---用来接收返回值的变量exec ProTest @name='1',@money=@m output --一定要注名是output就这么简单,我勱们就获得了返回值。
     
      

  3.   

    声明一个变量,把@Sql的结果给它,然后用它替代在@Str中的@Sql