2011-08-04 11 views
1

アプリケーションをSybase SQL AnywhereからSQL Serverに変換する予定です。SQLServer on existing update

SAでは、既存の更新で、行が存在する場合は主キーでチェックすることが多く使用されます。 trueの場合、update(更新句を実行しているのと同じ方法で)です。 そうでない場合、挿入されます。

SQL Serverはこのような機能をサポートしていますか?

答えて

1

AFAIKこれは1つのコマンドでサポートされていません。そして、私が見つけた最良の方法は、Jeremiah Clark's tipに従っていた:更新を試み、次に影響を受けるレコードの数をチェックする。それがゼロだった場合、私は挿入:

UPDATE Table1 SET (...) WHERE Column1='SomeValue' 
IF @@ROWCOUNT=0 
    INSERT INTO Table1 VALUES (...) 
+0

私はテストを避ける方法を探しています。しかし、それがない場合、おそらく私はこの方法を使用します。 – Zote

0

SQL Serverはその上のすべてのハイエンドRDBMS、ストアドプロシージャ、トリガ、UDFの機能とを持っている...あなたはおそらくMS SQL Serverは、分枝した知っているようにSybaseとまったく同じだから共通のルーツを持っている。

あなたの質問は完全にはわかりませんが、いくつかの条件に応じていくつかのロジックを含み、INSERTまたはUPDATEを行うSQL文を持つことができます。または、レコードがすでに見つかっている場合、TSQLはSQLのSQL方言ですサーバーとこれをサポートし、はるかに。

声明に具体的な質問や疑問がある場合は、今すぐSAにあるように声明をお伝えください。

+0

既存の更新値(1、 'ABC'、123)のTableA(id、value1、value2)に挿入します。 – Zote

+0

TableAにid(pk)が1の行がある場合は更新されます。そうでない場合は、挿入されます。 – Zote

+0

FYI SQL ServerはSybase __ASE__から分岐しました。 Sybase SQL Anywhereは、ASEと共通のコードを持たない完全に異なるRDBMSです。 –

1

SQL Server 2008以降を使用する場合は、MERGEコマンドを使用できます。あなたは、ここでの説明を見つけることができます。エリックザッセによって提案

http://technet.microsoft.com/en-us/library/bb510625(SQL.100).aspx

古いSQLを使用している場合は、エレミヤクラークのソリューションはOKになります。

+0

はい、2008 R2を使用しています。私は私のチームとこのコマンドについて話し合うつもりです。ありがとうございました。 – Zote