2011-10-06 81 views
3

我在做一個內部聯接,它如何在while循環中多次存儲臨時表?

例如,我試圖做到這一點,每次插入新的列到我的表:

WHILE @Counter <= @MaxCount 
BEGIN 
    SELECT @ParameterDefinitionID = ParameterDefinitionID FROM #CachedParameterDefinitionIDs WHERE RowNumber = @Counter 
    SELECT * INTO #ContactsWithPatientID FROM #ContactsWithPatientID INNER JOIN (SELECT Parameter2.ContactID AS 'Parameter2ContactID', Parameter2.Value AS FirstName FROM #CachedParameterValues Parameter2 WHERE ParameterDefinitionID = @ParameterDefinitionID) FirstNameTable ON #ContactsWithPatientID.ContactID = FirstNameTable.Parameter2ContactID 
    SET @Counter = @Counter + 1 
END 

它不會在工作第一因爲:

There is already an object named '#ContactsWithPatientID' in the database. 

我該如何使它工作?有沒有其他方法可以做到這一點?我這樣做是因爲我需要在查詢中追加一定數量的行作爲列。

+1

這是漆黑一片。你可能會被吃掉。 – SQLMason

+0

您可能不想考慮「SELECT * INTO」 – SQLMason

回答

6

創建該表第一

CREATE TABLE #ContactsWithPatientID (...) 
WHILE @Counter <= @MaxCount 
BEGIN 
    SELECT @ParameterDefinitionID = ParameterDefinitionID 
    FROM #CachedParameterDefinitionIDs 
    WHERE RowNumber = @Counter 

    INSERT #ContactsWithPatientID 
    SELECT * 
    FROM #ContactsWithPatientID 
      INNER JOIN 
      (SELECT Parameter2.ContactID AS 'Parameter2ContactID', Parameter2.Value AS FirstName 
      FROM #CachedParameterValues Parameter2 
      WHERE ParameterDefinitionID = @ParameterDefinitionID) FirstNameTable ON #ContactsWithPatientID.ContactID = FirstNameTable.Parameter2ContactID 

    SET @Counter = @Counter + 1 
END 

這幾乎可以肯定是一個完成去得爲遞歸CTE可能

+0

這裏的一個問題是我每次都通過添加一個新列來更改表定義,並且此解決方案給出此錯誤:插入錯誤:列名或提供的值數不匹配表定義。 – Alexandru

+0

@Alexandru:這不是SQL的工作原理。如果您希望將更改行放入單個CSV列中,這很簡單。如果你想添加一列,那麼運行ALTER TABLE並執行UPDATE。 – gbn

相關問題