2012-10-17 97 views
0

我試圖循環遍歷表中的數據,並使用數據來搜索以在另一個表中返回結果。如何使用簡單查詢從表中搜索數據列表並在表中返回非重複結果?

如何防止重複添加到表中?請注意,添加查詢結果的順序非常重要。因此,如果結果已添加,我不希望再次添加它們。請注意,由完整搜索類別完成的原始排名具有誤導性,我不想使用它。

我使用光標,但我被告知它可以使用簡單的查詢來解決,我該怎麼做?

以下是代碼。

... 

    DECLARE @subQ NVARCHAR(200) 
    SET @subQ = '' 

    DECLARE cur1 CURSOR FOR 
    SELECT combination FROM @Subqueries 

    OPEN cur1 
    FETCH NEXT FROM cur1 INTO @subQ 

    WHILE @@FETCH_STATUS = 0 
    BEGIN 
     INSERT INTO @Results (app_id, rank, importance) 
     SELECT app_id, rank, 1 
     FROM CONTAINSTABLE(dbo.Applications, display_name, @subQ) KEY_TBL 
     INNER JOIN Applications App 
     ON KEY_TBL.[KEY] = App.app_id 

     FETCH NEXT FROM cur1 INTO @subQ 
    END 

    CLOSE cur1 
    DEALLOCATE cur1 

    ... 
+4

它的死循環,因爲'WHILE 1 = 1',這將永遠是正確的。 – SchmitzIT

+0

謝謝。我如何使用普通查詢?我也希望這樣做。之前嘗試過,它不起作用。 – yeeen

回答

1

您在while循環中使用了1 = 1。所以它會顯示出總是真實的狀態,結果是該循環轉換爲無限循環。

在while循環中更改您的條件。

+0

謝謝。這確實是一個愚蠢的錯誤。由於我不熟悉SQL編程。我已經更新了這個問題,如果可以,請幫忙。 – yeeen

0

試試這個while循環

DECLARE @subQ NVARCHAR(200) 
DECLARE @mn int 
DECLARE @mx int 
DECLARE @val varchar(100) 
SET @subQ = '' 

;WITH CTE as(select ROW_NUMBER() over (order by (select 0)) as rn,* from @Subqueries) 
select @mn=MIN(rn),@mx=MAX(rn) from CTE 

WHILE @mn>[email protected] 
BEGIN 
select @val=somecolm from CTE where [email protected] 
--do here for each value of any column in CTE 
SET @[email protected]+1 
END 
+0

你能解釋一下嗎?謝謝 – yeeen

相關問題