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= @[email protected]+'/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<[email protected]
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<[email protected]
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)) + ',[email protected]+''',''P'',''24'')'
set @[email protected]+1
end
set @strCreateDate = @strInsertPi
BEGIN TRAN
exec (@strCreateDate)
--2
set @[email protected]+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