2012-07-11 1 views
6

Ich brauchte eine SQL-Abfrage, die einen Datenbankeintrag aktualisieren oder erstellen würde (wenn ein bestimmter Kunde noch nicht existiert). Ich fand die aktuelle Lösung im Internet:Ist eine REPLACE INTO-Abfrage eine gute Methode?

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

Da ich nicht sehe es viel benutzt und eigentlich noch nie davon gehört, das ist wirklich die Lösung, die ich will, oder soll ich dies manuell tun?

Antwort

5

Sowohl REPLACE INTO als auch die vorgeschlagene ON DUPLICATE KEY Alternative sind nicht standardmäßige SQL aus der MySQL-Variante. Ob Sie es verwenden, hängt also davon ab, ob Sie MySQl verwenden und ob Sie an diese Variante gebunden sein möchten.

ANSI SQL definiert eine MERGE Syntax, die mehr Standard ist, wenn es auf Ihrer Plattform implementiert

+0

Dieser Beitrag: http: // stackoverflow. com/a/10733485/1274398 schlägt vor, dass es von SQL Server 2008 und auf Stationen funktioniert. Ich kann nicht wissen, ob der Benutzer Sql Server 2005 oder 2008 verwendet, sie können frei wählen. Gibt es ein Äquivalent von 2005? –

+1

Es wurde in SQL Server in der Version 2008 eingeführt. Es gibt keine direkte Entsprechung in SQL 2005. Dies kann Ihnen einige Hinweise geben: http://sqlserver-tips.blogspot.co.uk/2006/09/mimicking-merge-statement-in-sql.html – podiluska

2

es ist häufiger

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

replace into tatsächlich löscht einen doppelten Eintrag zu verwenden, und fügt eine neue.

+0

So übersetzt, sollte es sein.. Command.CommandText = „INSERT INTO [Resource_Tracer] [dbo] [ Kunde] (CustomerName, CustomerID) VALUES (@KundenName, @CustomerID) ON DUPLICATE KEY UPDATE [Ressource_Tracer]. [Dbo]. [Kunde] (CustomerName, CustomerID) VALUES (@KundenName, @CustomerID) "? –

+0

Ich habe nicht bemerkt, dass Sie MSSQL verwenden. Dann sollten Sie in "MERGE" schauen. Siehe [diesen Beitrag] (http://stackoverflow.com/questions/1197733/does-sql-server-offer-anything-like-mysqls-on-duplicate-key-update) –