读书人

求潜水员帮忙看上这段预存

发布时间: 2012-10-29 10:03:53 作者: rapoo

求潜水员帮忙看下这段预存
declare @i AS INT;
declare @N AS INT;
declare @i1 AS INT;
declare @N1 AS INT;

declare @strNow nvarchar(10);
declare @strInsertPi varchar(4000);
declare @strInsertPi1 varchar(4000);
declare @strCreateDate varchar(8000);
declare @dateTemp nvarchar(10);
declare @DateNow nvarchar(10);
DECLARE @NowYear nvarchar(4);
DECLARE @NowMonth nvarchar(2);

set @strNow='2012-08-01'

set @NowYear=convert(varchar(4),year(@strNow))
set @NowMonth=convert(varchar(2),month(@strNow))
set @DateNow= @NowYear+'/'+@NowMonth+'/01'



IF EXISTS (SELECT 1 FROM tempdb.dbo.sysobjects where name ='##tempPINew')
BEGIN
drop table ##tempPINew
end
set @strCreateDate = 'create table ##tempPINew (id_pi int,pidate varchar(10),id_t char(1),x float) '
BEGIN TRAN
exec (@strCreateDate)


--1循向前推12月
set @i1=1
set @N1=12
while @i1<=@N1
begin
set @DateNow=convert(varchar(10),dateadd(month,-1,@DateNow),121)

--2按月天,循指定次,填充SQL字句
set @i=1
set @N=datediff(day,@DateNow,dateadd(month,1,@DateNow))
set @strInsertPi=''
while @i<=@N
begin
set @dateTemp=convert(varchar(10),dateadd(day,@i-1,@DateNow),121)
--建表 ##tempPINew SQL
set @strInsertPi = @strInsertPi +' insert into ##tempPINew(id_pi,PIdate,id_t,x) values (' + convert(varchar(2),month(@DateNow)) + ','''+@dateTemp+''',''P'',''24'')'
set @i=@i+1
end
set @strCreateDate = @strInsertPi
BEGIN TRAN
exec (@strCreateDate)
--2
set @i1=@i1+1
end
--1

错误说明:
如果直接在预存中带入变量执行,OK!
如果是点击执行预存程序执行,会出现以下错误:
息 266, 16, 2,程序 ProGetGroupDUR,行 0
EXECUTE 之後的交易示 BEGIN 和 COMMIT 述式目不相符。前次 = 0,目前的 = 1。

(1 料列受到影)


里面是不是少了什么?有没有说帮忙修改下,谢谢!









[解决办法]

SQL code
--1循向前推12月SET @i1 = 1SET @N1 = 12WHILE @i1 <= @N1     BEGIN          SET @DateNow = CONVERT(VARCHAR(10), DATEADD(month, -1, @DateNow), 121)--2按月天,循指定次,填充SQL字句        SET @i = 1        SET @N = DATEDIFF(day, @DateNow, DATEADD(month, 1, @DateNow))        SET @strInsertPi = ''        WHILE @i <= @N             BEGIN                  SET @dateTemp = CONVERT(VARCHAR(10), DATEADD(day, @i - 1,                                                             @DateNow), 121)--建表 ##tempPINew SQL                SET @strInsertPi = @strInsertPi                    + ' insert into ##tempPINew(id_pi,PIdate,id_t,x) values ('                    + CONVERT(VARCHAR(2), MONTH(@DateNow)) + ',''' + @dateTemp                    + ''',''P'',''24'')'                SET @i = @i + 1            END        SET @strCreateDate = @strInsertPi        BEGIN TRAN                             --=============??? 没有commit 也没有对应的rollback        EXEC (@strCreateDate)--2        SET @i1 = @i1 + 1    END--1 

读书人网 >SQL Server

热点推荐