2012-07-11 18 views
6

Necesitaba una consulta SQL que actualizara o creara una entrada en la base de datos (si un determinado cliente aún no existe). He encontrado la solución actual en el Internet:¿Es una práctica recomendada de REEMPLAZO?

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

Como yo no lo veo utiliza mucho y en realidad nunca oído hablar de él antes, ¿es realmente la solución que yo quiero, o debería hacerlo de forma manual?

Respuesta

5

Tanto REPLACE INTO como la alternativa ON DUPLICATE KEY sugeridas son SQL no estándar de la variante de MySQL. Entonces, si lo usa depende de a) si está usando MySQl yb) si quiere estar vinculado a esa variante.

ANSI SQL define una sintaxis MERGE que es más estándar, si se aplica en su plataforma

+0

Esta publicación: http: // stackoverflow. com/a/10733485/1274398 sugiere que funciona desde Sql Server 2008 y en salas. No puedo saber si el usuario usa Sql Server 2005 o 2008, son libres de elegir. ¿Hay un equivalente en 2005? –

+1

Se introdujo en SQL Server en la versión 2008. No existe un equivalente directo en SQL 2005. Esto puede darle algunos consejos: http://sqlserver-tips.blogspot.co.uk/2006/09/mimicking-merge-statement-in-sql.html – podiluska

2

es más común el uso de

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

replace into realidad elimina una entrada duplicada e inserta una nueva.

+0

Así, traducido debe ser:.. command.CommandText = "INSERT INTO [Resource_Tracer] [dbo] [ Cliente] (CustomerName, CustomerID) VALUES (@CustomerName, @CustomerID) ON DUPLICATE KEY UPDATE [Resource_Tracer]. [Dbo]. [Customer] (CustomerName, CustomerID) VALUES (@CustomerName, @CustomerID) "? –

+0

No noté que estás usando MSSQL. Entonces deberías mirar 'MERGE'. Ver [esta publicación] (http://stackoverflow.com/questions/1197733/does-sql-server-offer-anything-like-mysqls-on-duplicate-key-update) –

Cuestiones relacionadas