jueves, 24 de junio de 2010

About SQL Update and Insert: Updating data in a Table in another Database

I was confronted with a common problem when working with several staging environments, how to sync the data in the different databases.
I came up with a quite sleak solution, well at least is what I want to believe:


/****** INSERT NOT EXISTING ROWS ******/

INSERT INTO dbo.myFirstTable
SELECT KeyColumn1, KeyColumn2, KeyColumn3,Column1
FROM (

SELECT KeyColumn1, KeyColumn2, KeyColumn3,Column1

FROM mySecondDataBase.dbo.myFirstTable

WHERE (KeyColumn1 = 1)
AND (KeyColumn2 IN (1, 3, 35, 36, 29, 12, 38))
AND (KeyColumn3 = 'A')
) as myTempSubQuery

WHERE (

SELECT COUNT(*)
FROM dbo.myFirstTable
WHERE (KeyColumn1 = myTempSubQuery.KeyColumn1)
AND (KeyColumn2 = myTempSubQuery.KeyColumn2)
AND (KeyColumn3 = myTempSubQuery.KeyColumn3)

) = 0


/****** UPDATE EXISTING ROWS ******/

UPDATE dbo.myFirstTable
SET Column1 = myTempSubQuery.Column1
FROM (
SELECT KeyColumn1, KeyColumn2, KeyColumn3,Column1
FROM mySecondDataBase.dbo.myFirstTable
WHERE (KeyColumn1 = 1)
AND (KeyColumn2 IN (1, 3, 35, 36, 29, 12, 38))
AND (KeyColumn3 = 'A')
) as myTempSubQuery, dbo.myFirstTable targetTableInFirstDataBase
WHERE (targetTableInFirstDataBase.KeyColumn1 = myTempSubQuery.KeyColumn1)
AND (targetTableInFirstDataBase.KeyColumn2 = myTempSubQuery.KeyColumn2)
AND (targetTableInFirstDataBase.KeyColumn3 = myTempSubQuery.KeyColumn3)


Some inspiration coming from:

http://www.sqlrecipes.com/sql_questions_answers/insert_update_record_if_already_exists-6/

Code Markup from:

http://lukabloga.blogspot.com/2008/10/to-test-new-highlighting.html

No hay comentarios:

Publicar un comentario