2017-01-09 1 views
0

У меня есть таблица температуры называется «customerInfo», как показано ниже:Как обновить атрибут таблицы с другой таблицей withouth с использованием соединения или слияния

|CustomerNumber | 
|197210271883 | 
|197210271883 | 
|194905062891 | 
|194905301380 | 

И еще один стол под названием «Человек», как показано ниже:

|Id CustomerNumber FirstName LastName | 
|1 NULL   Jack  Axelsson | 
|2 198003147470 Sarah  Flöijer | 
|3 196305088491 Göte  Lagergren | 

Мне нужно обновить номер клиента во второй таблице на основе того, что У меня в первом. Как видите, между ними нет никакой связи, и я не могу использовать методы объединения или слияния.

Я пытался использовать два курсора. Я совершенно не знаю, правильно это или нет?

DECLARE @value1 bigint 
DECLARE db_cursor CURSOR FOR 
SELECT CustomerNumber from customerInfo; 

DECLARE @value2 bigint 
DECLARE db_cursor_2 CURSOR FOR 
SELECT CustomerNumber from Person; 

OPEN db_cursor 
FETCH NEXT FROM db_cursor INTO @value1 

OPEN db_cursor_2 
FETCH NEXT FROM db_cursor_2 INTO @value2 


WHILE @@FETCH_STATUS = 0 
    BEGIN 
      update Person set CustomerNumber = @value1 
      where CustomerNumber = @value2 

      FETCH NEXT FROM db_cursor INTO @value1 
      FETCH NEXT FROM db_cursor_2 INTO @value2 
    END 

CLOSE db_cursor 
DEALLOCATE db_cursor 
CLOSE db_cursor_2 
DEALLOCATE db_cursor_2 
+1

Каков ваш ожидаемый результат после таблицы обновлений2? –

ответ

1

Если я правильно понял, вы хотите превзойти существующие значения CustomerNumber во второй таблице?

Для этого курсор - не лучшая идея, потому что они работают последовательно. Может быть, попробовать что-то вроде этого:

; WITH CTE1 AS (
    SELECT CustomerNumber, ROW_NUMBER() OVER (ORDER BY (SELECT 100)) AS SNO 
    FROM customerInfo 
), CTE2 AS (
    SELECT Id, CustomerNumber, ROW_NUMBER() OVER (ORDER BY (SELECT 100)) AS SNO 
    FROM Person 
) 
UPDATE CTE2 
SET CTE2.CustomerNumber = CTE1.CustomerNumber 
FROM CTE1 
    INNER JOIN CTE2 ON CTE1.SNO = CTE2.SNO 

Это не была испытана в SQL Server, так что могут быть некоторые недостатки, но вы получите точку из приведенного выше кода.

+0

Спасибо за сообщение. Если я последую тому, что вы предложили, таблица Person будет обновлена, но все атрибуты будут одинаковыми. –

+0

Тогда я не понял ваш вопрос правильно. Что вы хотите точно с атрибутами? –

+0

Хорошо. Таблица персонала должна быть обновлена. но единственным критерием является получение значения из соответствующей строки в другой таблице. что, как вы предположили, номер строки - идеальная идея присоединиться к таблицам, но почему значения после обновления все одинаковы. они должны выглядеть так, как если бы мы скопировали их из первой таблицы и вставляем во второй –

Смежные вопросы