Как я могу хранить во временной таблице несколько раз в цикле while? - PullRequest
3 голосов
/ 06 октября 2011

Я делаю внутреннее соединение, которое добавляет новый столбец в мою таблицу каждый раз, когда оно

Например, я пытаюсь сделать это:

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 Ответ

6 голосов
/ 06 октября 2011

Сначала создайте таблицу

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, вероятно,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...