アプリケーションをSybase SQL AnywhereからSQL Serverに変換する予定です。SQLServer on existing update
SAでは、既存の更新で、行が存在する場合は主キーでチェックすることが多く使用されます。 trueの場合、update(更新句を実行しているのと同じ方法で)です。 そうでない場合、挿入されます。
SQL Serverはこのような機能をサポートしていますか?
アプリケーションをSybase SQL AnywhereからSQL Serverに変換する予定です。SQLServer on existing update
SAでは、既存の更新で、行が存在する場合は主キーでチェックすることが多く使用されます。 trueの場合、update(更新句を実行しているのと同じ方法で)です。 そうでない場合、挿入されます。
SQL Serverはこのような機能をサポートしていますか?
AFAIKこれは1つのコマンドでサポートされていません。そして、私が見つけた最良の方法は、Jeremiah Clark's tipに従っていた:更新を試み、次に影響を受けるレコードの数をチェックする。それがゼロだった場合、私は挿入:
UPDATE Table1 SET (...) WHERE Column1='SomeValue'
IF @@ROWCOUNT=0
INSERT INTO Table1 VALUES (...)
SQL Serverはその上のすべてのハイエンドRDBMS、ストアドプロシージャ、トリガ、UDFの機能とを持っている...あなたはおそらくMS SQL Serverは、分枝した知っているようにSybaseとまったく同じだから共通のルーツを持っている。
あなたの質問は完全にはわかりませんが、いくつかの条件に応じていくつかのロジックを含み、INSERTまたはUPDATEを行うSQL文を持つことができます。または、レコードがすでに見つかっている場合、TSQLはSQLのSQL方言ですサーバーとこれをサポートし、はるかに。
声明に具体的な質問や疑問がある場合は、今すぐSAにあるように声明をお伝えください。
SQL Server 2008以降を使用する場合は、MERGEコマンドを使用できます。あなたは、ここでの説明を見つけることができます。エリックザッセによって提案
http://technet.microsoft.com/en-us/library/bb510625(SQL.100).aspx
古いSQLを使用している場合は、エレミヤクラークのソリューションはOKになります。
はい、2008 R2を使用しています。私は私のチームとこのコマンドについて話し合うつもりです。ありがとうございました。 – Zote
私はテストを避ける方法を探しています。しかし、それがない場合、おそらく私はこの方法を使用します。 – Zote