2012-07-11 6 views
6

Avevo bisogno di una query SQL che aggiorni o crei una voce di database (se un determinato cliente non esiste ancora). Ho trovato la soluzione corrente su internet:È una buona pratica di query REPLACE INTO?

command.CommandText = "REPLACE INTO [Resource_Tracer].[dbo].[Customer](CustomerName, CustomerID) VALUES (@CustomerName, @CustomerID)" 

Dal momento che non vedo molto utilizzato e in realtà mai sentito parlare prima, questa è davvero la soluzione che voglio, o devo farlo manualmente?

risposta

5

Entrambi REPLACE INTO e l'alternativa ON DUPLICATE KEY suggerita sono SQL non standard dalla variante MySQL. Quindi, se lo usi dipende da a) se stai usando MySQl eb) se vuoi essere legato a quella variante.

ANSI SQL definisce una sintassi MERGE che è più normale, se è implementata sul sistema

+0

Questo post: http: // stackoverflow. it/a/10733485/1274398 suggerisce che funzioni da Sql Server 2008 e su reparti. Non posso sapere se l'utente utilizza Sql Server 2005 o 2008, sono liberi di scegliere. Esiste un equivalente del 2005? –

+1

È stato introdotto in SQL Server nella versione 2008. Non esiste un equivalente diretto in SQL 2005. Questo potrebbe darti alcuni suggerimenti: http://sqlserver-tips.blogspot.co.uk/2006/09/mimicking-merge-statement-in-sql.html – podiluska

2

è più comune usare

INSERT INTO table col1) VALUES (1) 
ON DUPLICATE KEY UPDATE col1=VALUES(Col1) 

replace into in realtà elimina una voce duplicata e inserisce una nuova.

+0

Quindi, tradotto dovrebbe essere:.. command.CommandText = "INSERT INTO [Resource_Tracer] [dbo] [ Cliente] (CustomerName, CustomerID) VALUES (@CustomerName, @CustomerID) ON DUPLICATE KEY UPDATE [Resource_Tracer]. [Dbo]. [Cliente] (CustomerName, CustomerID) VALUES (@CustomerName, @CustomerID) "? –

+0

Non ho notato che stai usando MSSQL. Quindi dovresti esaminare "MERGE". Vedi [questo post] (http://stackoverflow.com/questions/1197733/does-sql-server-offer-anything-like-mysqls-on-duplicate-key-update) –