求潜水员帮忙看下这段预存
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 = 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 --=============??? 没有commit 也没有对应的rollback
EXEC (@strCreateDate)
--2
SET @i1 = @i1 + 1
END
--1