日期:2014-05-19  浏览次数:20371 次

☆ 内存表 和 标识列 ☆--热烈欢迎大家帮助!!!


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(任务编码,编码-标识列)
暂时看上去是对的。


------解决方案--------------------