日期:2014-05-17  浏览次数:20595 次

关于sql语句的多重循环
下面的代码里面只会执行内层的while语句,外层的while不会执行,请高手帮忙。
ps. sql server 怎么调试的?断点什么的也搞不懂,不会用啊……

SQL code

declare @MyCounter int
declare @MyDateTime datetime
set @MyCounter = 1
set @MyDateTime = '2012-10-5 00:00:00'
while(@MyCounter < 16)
    begin
        while(@MyDateTime < '2012-10-5 23:59:59')
            begin
            insert into dbo.H_MURunTime(MUId,[CurTime],RunTime)
            values(@MyCounter,@MyDateTime,1)
            set @MyDateTime = dateadd(hh,1,@MyDateTime)
            end
    set @MyCounter = @MyCounter + 1
    end




------解决方案--------------------
print看看.
------解决方案--------------------
如果是SQL SERVER 2005以下版本,只能通过加print xxxx 或 select xxx之类的进行调试
------解决方案--------------------
第一次代码执行 里面的while执行完毕后。 其实外出while 也执行了。但是 第二次以后的内层while不会执行因为(@MyDateTime < '2012-10-5 23:59:59')不会再满足条件了
------解决方案--------------------
不是外层的while不执行,是执行了但是内层的while已经进不去了。因为第一次内层的while循环出去后日期就变成2012-10-6 00:59:59 所以内层while再也进不去了。如果你要再进的话
SQL code

declare @MyCounter int
declare @MyDateTime datetime
set @MyCounter = 1
set @MyDateTime = '2012-10-5 00:00:00'
while(@MyCounter < 16)
    begin
        while(@MyDateTime < '2012-10-5 23:59:59')
            begin
            insert into dbo.H_MURunTime(MUId,[CurTime],RunTime)
            values(@MyCounter,@MyDateTime,1)
            set @MyDateTime = dateadd(hh,1,@MyDateTime)
            end
    set @MyCounter = @MyCounter + 1
    SET @MyDateTime = '2012-10-5 00:00:00'
    end