2012-07-11 1 views
6

データベースエントリを更新または作成するSQLクエリが必要でした(特定の顧客がまだ存在しない場合)。REPLACE INTOのクエリは良い方法ですか?

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

私はそれが多くを使用し、実際に前にそれを聞いたことがない表示されていないので、これは本当に私が欲しいソリューションである、または私はこれを手動で行う必要があります:私は、インターネット上の現在の解決策を見つけましたか?

答えて

5

REPLACE INTOON DUPLICATE KEYのいずれかの代替案は、MySQLの亜種の非標準SQLです。したがって、あなたがそれを使用するかどうかは、a)あなたがMySQlを使用しているかどうか、b)そのバリエーションに縛られるかどうかによって異なります。 。それはだからあなたのプラットフォーム

+0

この投稿:http:// stackoverflow。 com/a/10733485/1274398は、Sql Server 2008とそれ以降で動作することを示しています。ユーザーがSql Server 2005または2008を使用しているかどうかはわかりませんが、自由に選択できます。 2005年相当品はありますか? –

+1

2008年版でSQL Serverに導入されました。 SQL 2005には直接の同等の機能はありません。これにより、いくつかの参考になります。http://sqlserver-tips.blogspot.co.uk/2006/09/mimicking-merge-statement-in-sql.html – podiluska

2

実際に重複したエントリを削除し、新しいものを挿入し

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

replace intoを使用することがより一般的です。

+0

に実装されている場合

ANSI SQLは、それがあるべき翻訳し、より標準的であるMERGE構文を定義しています。 command.CommandText =「INSERT INTO [Resource_Tracer] [DBO] [ (CustomerName、CustomerID)VALUES(@CustomerName、@ CustomerID)VALUES(@CustomerName、@ CustomerID)VALUES(@ CustomerName、@ CustomerID) –

+0

あなたはMSSQLを使用していることに気付かなかった。それから、「MERGE」を調べるべきです。 [この記事を参照](http://stackoverflow.com/questions/1197733/does-sql-server-offer-anything-like-mysqls-on-duplicate-key-update) –

関連する問題