2012-06-20 4 views
0

Я хочу заменить таблицу «Met» в моей базе данных sql-сервера с новым datatable из приложения. Моя основная идея: зацикливать каждую строку в новой таблице и сравнить существующую таблицу.Замените таблицу сервера sql на новую

Я использовал хранимую процедуру, но только с функцией «вставки» и «обновления». Нужно ли сначала удалить старую таблицу?

Благодаря

Для каждой строки, я хочу петлю следующую хранимую процедуру.

;WITH CTE AS (SELECT [email protected],[email protected],[email protected],[email protected]) 
MERGE Met AS TARGET 
USING CTE SOURCE 
ON SOURCE.skey = TARGET.skey 
WHEN MATCHED THEN 
UPDATE 
SET ProbMetID = SOURCE.ProbMetID, 
    Interval = SOURCE.Interval, 
    Counts = SOURCE.Counts, 
    WHERE skey = @skey 
WHEN NOT MATCHED THEN  
INSERT INTO Met(skey,ProbMetID,Interval,Counts) 
VALUES(@skey,@ProbMetID,@Interval,@Counts); 
+0

Это зависит от того, хотите ли вы сохранить любые строки, которые не находятся в новой таблице. – Paparazzi

+0

Если какие-либо строки не находятся в новой таблице, я хочу их удалить. –

ответ

1

Инструкция MERGE включает в себя функцию DELETE. Посмотрите сообщение Pinal Dave на нем: http://blog.sqlauthority.com/2008/08/28/sql-server-2008-introduction-to-merge-statement-one-statement-for-insert-update-delete/

Я обнаружил, что самый простой способ сделать это с уровня приложения - вставить все в таблицу temp, а затем выполнить всю операцию MERGE между временной таблицей и фактическим Таблица. Большая часть состоит в том, что вы можете сделать все это за одну транзакцию. Кроме того, вы можете вставлять таблицу приложений в таблицу temp для супер-потрясающей скорости db (TM).

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