2013-05-28 10 views
8

Mam kategorii nazwa tabeli SQL.tutaj jest struktura.Jak korzystać z przechowywanej procedury Wybierz wartość za pomocą, gdy

slno  Category   Uppercategory 

1   Mouse    Computer 

2   Computer   Electronics 

3   Electronics   END 

4   END     - 

Oto mysz w komputerze, a następnie uppercategory komputera w uppercategory Electronics.and elektroniki jest ostatnim uppercategory ponieważ Electronics mający uppercategory ENd.I trzeba uzyskać ostatniej kategorii (elektronika), którą uppercatergory to END. Próbowałem kod, ale nie uzyskać wynik. Jest mój kod.

USE [Database1] 
GO 

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[kt_category] 
     @Dcat AS NVARCHAR(250) 
AS 
DECLARE @tmp TABLE (cater NVARCHAR(255)) 

BEGIN 

INSERT INTO @tmp 
SELECT UPPERCATEGORY FROM CATEGORY where [email protected] 

while(SELECT UPPERCATEGORY FROM CATEGORY)= 'END' 
RETURN 
END 
+1

Dlaczego "HOVED" zamiast "END"? – sarwar026

+0

Niestety .......... – Arun

Odpowiedz

3

Można również użyć kwerendy cyklicznej, aby to osiągnąć.

;WITH R 
    AS (SELECT *, 
       1 AS Level 
     FROM CATEGORY 
     WHERE Category = @Dcat 
     UNION ALL 
     SELECT C.*, 
       R.Level + 1 
     FROM CATEGORY C 
       JOIN R 
        ON R.Uppercategory = C.Category) 
SELECT TOP 1 * 
FROM R 
ORDER BY Level DESC 

Można również użyć

SELECT TOP 1 * 
FROM R 
WHERE Uppercategory = 'End' 
ORDER BY Level 

jako ostatecznego zapytania. Ma to bliższą semantykę kodu w twoim pytaniu.

+0

postara ......... – Arun

+0

Próbowałem tej kwerendy w moim stole, ale pojawia się odpowiedź jak Kategoria Uppercategory KONIEC muszę Przed tym etapie .potrzebuje kategorii, gdy górna kategoria to KONIEC – Arun

+0

@ user2318361 - A więc, czego konkretnie potrzebujesz, zwróciłeś z przykładowych danych? Komputer? –

Powiązane problemy