☆ 内存表 和 标识列 ☆--热烈欢迎大家帮助!!!
DECLARE @BEGINTIME DATETIME
DECLARE @ENDTIME DATETIME
SET @BEGINTIME = '2007-1-1 0:0:0 '
SET @ENDTIME = '2007-3-1 0:0:0 '
----------------------------------------------
DECLARE @T TABLE(任务编码 CHAR(20),编码 INT)
----------------------------------------------
DECLARE @I INT
SET @I=0
WHILE @I <=DATEDIFF(MONTH,@BEGINTIME,@ENDTIME)
BEGIN
IF (SELECT DATEDIFF(MONTH,@BEGINTIME,@ENDTIME)) > = @I
BEGIN
DECLARE @TEMP TABLE(名称 CHAR(20),编码 INT IDENTITY(1,1))
INSERT INTO @TEMP
SELECT 任务编码
FROM TTASKVIEW
WHERE 生成任务时刻> =(DATEADD(MONTH,@I,CONVERT(DATETIME,(LEFT(CONVERT(VARCHAR,@BEGINTIME,2),6)+ '01 '))))
AND 生成任务时刻> = CONVERT(DATETIME,(LEFT(CONVERT(VARCHAR,@BEGINTIME,2),6)+ '01 '))
AND 生成任务时刻 <=(DATEADD(MONTH,@I+1,CONVERT(DATETIME,(LEFT(CONVERT(VARCHAR,@BEGINTIME,2),6)+ '01 '))))
INSERT INTO @T
SELECT * FROM @TEMP
-----------------------
DBCC CHECKIDENT (@TEMP, RESEED, 1)--here !!!
-----------------------
select * from @TEMP
DELETE FROM @TEMP
END
SET @I=@I+1
END
select * from @T
我要写成一个函数,似乎不能用临时表。
内存表不能drop,我的标识列要求每月都是以1开始的。
DBCC CHECKIDENT (@TEMP, RESEED, 1)--here !!!
这个话似乎不对???不该这么写?
------解决方案--------------------DBCC CHECKIDENT (@TEMP, RESEED, 1)
不可以这样的。
但你可以在建@TEMP不使用IDENTITY(1,1),使用一个增量@I=@I+1 插入到表@TEMP中的编码列。
------解决方案--------------------每次重新产生不可以么?
------解决方案-------------------- DECLARE @BEGINTIME DATETIME
DECLARE @ENDTIME DATETIME
SET @BEGINTIME = '2007-1-1 0:0:0 '
SET @ENDTIME = '2007-3-1 0:0:0 '
----------------------------------------------
DECLARE @T TABLE(任务编码 CHAR(20),编码 INT)
----------------------------------------------
DECLARE @I INT
SET @I=0
WHILE @I <=DATEDIFF(MONTH,@BEGINTIME,@ENDTIME)
BEGIN
IF (SELECT DATEDIFF(MONTH,@BEGINTIME,@ENDTIME)) > = @I
BEGIN
-----------------------
DBCC CHECKIDENT (TEMP0, RESEED,0)
-----------------------
INSERT INTO TEMP0
SELECT 任务编码
FROM TTASKVIEW
WHERE 生成任务时刻> =(DATEADD(MONTH,@I,CONVERT(DATETIME,(LEFT(CONVERT(VARCHAR,@BEGINTIME,2),6)+ '01 '))))
AND 生成任务时刻> = CONVERT(DATETIME,(LEFT(CONVERT(VARCHAR,@BEGINTIME,2),6)+ '01 '))
AND 生成任务时刻 <=(DATEADD(MONTH,@I+1,CONVERT(DATETIME,(LEFT(CONVERT(VARCHAR,@BEGINTIME,2),6)+ '01 '))))
INSERT INTO @T
SELECT * FROM TEMP0
DELETE FROM TEMP0
END
SET @I=@I+1
END
select * from @T
呵呵,还是我。
我在数据库里面建立了表TEMP0(任务编码,编码-标识列)
暂时看上去是对的。
------解决方案--------------------