PDA

View Full Version : مشکل با جدول مجازی



Loveski
یک شنبه 08 اسفند 1389, 10:21 صبح
باسلام
من برای انجام دادن یکسری محاسبات و ذخیره سازی موقت انها از جدول مجازی استفاده می کنم ولی هر دفعه جواب متفاوتی را بر می گرداند
ولی زمانی که همان داده ها را در یک جدول ثابت (معمولی) ذخیره می کنم جواب درست را بر می گرداند و با تعداد دفعات تکرار حواب ثابتی را بر می گرداند.

به نظر شما دوستان مشکل از چی می باشد ؟

با تشکر.

Topcoding
یک شنبه 08 اسفند 1389, 18:30 عصر
سلام دوست عزیز
میشه کدهاتو ببینیم؟

Loveski
یک شنبه 08 اسفند 1389, 22:48 عصر
declare @ID bigint
declare @Group int

------Build_Tree-------
declare @Radif bigint
declare @ID1 bigint
declare @parent bigint
declare @check bit
declare @Level int
declare @num bigint

--------------
------build_Edge--------
declare @ID2 bigint
declare @parent2 bigint
declare @Level2 int
declare @ID12 bigint
declare @parent12 bigint
declare @Level12 int
declare @num2 int

------------------------
Create TABLE #Virtual_Tree_Sense (
[Radif] [int] IDENTITY(1,1) NOT NULL,
[ID] [bigint] NULL,
[Parent] [bigint] NULL,
[Level] [int] NULL,
[check] [bit] NULL default(0)
)

Create Table #Graph (
[Radif] [int] IDENTITY(1,1) NOT NULL,
[ID] [bigint] NULL,
[Parent] [bigint] NULL,
[Level] [int] NULL,
[num] [int] NULL
)

Truncate table #Graph
Truncate table #Virtual_Tree_Sense

--TRuncate Table Graph
--Truncate Table Find_node

DECLARE MyCur2 CURSOR
FOR

SELECT [ID],[Group]
FROM [Graph].[dbo].[Sense_Word]

OPEN MyCur2

FETCH NEXT FROM MyCur2 INTO @ID , @Group
WHILE (@@FETCH_STATUS <> -1) AND (@@FETCH_STATUS <> -2)
BEGIN --while1


--EXECUTE [Graph].[dbo].[Build_Tree] @ID
----------------------------------------------

--set @num = 108820496
set @num = @ID


delete from #Virtual_Tree_Sense


INSERT INTO #Virtual_Tree_Sense
([ID]
,[Parent], [Level])

Select id , parent , 1 from [Graph].[dbo].[Relation_Wordnet]
where parent = @num

DECLARE MyCur CURSOR
FOR

SELECT [Radif],[ID],[Parent],[Check],[Level] FROM #Virtual_Tree_Sense
Where ([check] = 0 or [check] is null) And [Level] < 4

OPEN MyCur

FETCH NEXT FROM MyCur INTO @radif , @ID1 , @parent , @Check , @level
WHILE (@@FETCH_STATUS <> -1) AND (@@FETCH_STATUS <> -2)
BEGIN --while1

INSERT INTO #Virtual_Tree_Sense
([ID]
,[Parent],[Level])
Select id , parent , @level+1 from [Graph].[dbo].[Relation_Wordnet]
where parent = @ID1

And
(ID not in
(SELECT [ID] FROM #Virtual_Tree_Sense))
and
ID <> @num

UPDATE #Virtual_Tree_Sense
SET [Check] = 1
WHERE radif = @Radif


FETCH NEXT FROM MyCur INTO @radif , @ID1 , @parent , @Check , @level
END -- While 1

CLOSE Mycur
DEALLOCATE MyCur


------------------------------------------------

--EXECUTE [Graph].[dbo].[Build_Edge] @Group

-------------------------------------------------

set @num2 = (select max(num) from #Graph)

IF (@num2 is null) set @num2 =0

DECLARE MyCur1 CURSOR
FOR

SELECT ID,Parent,[Level] FROM #Virtual_Tree_Sense
where ID in
(select ID from Sense_Word where [Group] <> @Group)
group by ID,Parent,[Level]
order by level

OPEN MyCur1

FETCH NEXT FROM MyCur1 INTO @ID2 , @parent2 , @level2
WHILE (@@FETCH_STATUS <> -1) AND (@@FETCH_STATUS <> -2)
BEGIN --while1

set @num2 = @num2 + 1

INSERT INTO #Graph
([ID]
,[Parent],[Level],[num])
values(@id2,@Parent2,@Level2,@num2)

set @Level2 = @Level2 - 1
While @level2 > 0
begin

Select @ID2 =ID , @Parent2= parent , @Level12 =[level] from #Virtual_Tree_Sense Where ID = @Parent2 And Level = @Level2
group by ID,Parent,[Level]
order by [level]


INSERT INTO #Graph
([ID]
,[Parent],[Level],[num])
values(@id2,@Parent2,@Level2,@num2)

set @Level2 = @Level2 - 1
End


FETCH NEXT FROM MyCur1 INTO @ID2 , @parent2 , @level2
END -- While 1

CLOSE Mycur1
DEALLOCATE MyCur1

-------------------------------------------------

FETCH NEXT FROM MyCur2 INTO @ID , @Group
END -- While 1

CLOSE Mycur2
DEALLOCATE MyCur2


----------------------End---------------------------
----------------------Begin------------------------------
--declare @num int

Truncate table Edge

DECLARE MyCur1 CURSOR
FOR

SELECT [num]
FROM #Graph
group by [num]

OPEN MyCur1

FETCH NEXT FROM MyCur1 INTO @num
WHILE (@@FETCH_STATUS <> -1) AND (@@FETCH_STATUS <> -2)
BEGIN --while1

--EXECUTE [Graph].[dbo].[Build_Edge_Table] @num
------------------------------------------
--declare @ID bigint
--declare @parent bigint
--declare @Level int


INSERT INTO [Graph].[dbo].[Edge]
([Edge]
,[E1]
,[E2])
SELECT num
,[Parent],[ID]
FROM #Graph
Where num = @num and level = 1


DECLARE MyCur CURSOR
FOR

SELECT [ID]
,[Parent],[level]
FROM #Graph
Where num = @num And level >1
order by num,[level]
OPEN MyCur

FETCH NEXT FROM MyCur INTO @ID , @parent, @level
WHILE (@@FETCH_STATUS <> -1) AND (@@FETCH_STATUS <> -2)
BEGIN --while1

IF (@level = 2)
begin
UPDATE [Graph].[dbo].[Edge] SET [E3] = @ID Where Edge = @num
End

Else IF (@level = 3)
begin
UPDATE [Graph].[dbo].[Edge] SET [E4] = @ID Where Edge = @num
End
Else IF (@level = 4)
begin
UPDATE [Graph].[dbo].[Edge] SET [E5] = @ID Where Edge = @num
End



FETCH NEXT FROM MyCur INTO @ID , @parent , @level
END -- While 1

CLOSE Mycur
DEALLOCATE MyCur

------------------------------------------


FETCH NEXT FROM MyCur1 INTO @num
END -- While 1

CLOSE Mycur1
DEALLOCATE MyCur1

Drop table #Graph
Drop table #Virtual_Tree_Sense

----------------------End------------------------------