アプリケーションを Sybase SQL Anywhere から SQL Server に変換する予定です。
SAでは、行が存在するかどうかを主キーでチェックする「on existing update」を多く使用しています。true の場合、更新されます (update 句を実行した場合と同じ方法で)。そうでない場合は挿入します。
SQL Server はこのようなものをサポートしていますか?
アプリケーションを Sybase SQL Anywhere から SQL Server に変換する予定です。
SAでは、行が存在するかどうかを主キーでチェックする「on existing update」を多く使用しています。true の場合、更新されます (update 句を実行した場合と同じ方法で)。そうでない場合は挿入します。
SQL Server はこのようなものをサポートしていますか?
私の知る限り、これは 1 つのコマンドではサポートされていません。そして、私が見つけた最善の方法は、Jeremiah Clark のヒントに従うことでした。更新を試みてから、影響を受けるレコードの数を確認してください。ゼロの場合は、次を挿入します。
UPDATE Table1 SET (...) WHERE Column1='SomeValue'
IF @@ROWCOUNT=0
INSERT INTO Table1 VALUES (...)
SQL Server 2008 以降を使用する場合は、MERGE コマンドを使用できます。ここで説明を見つけることができます:
http://technet.microsoft.com/en-us/library/bb510625(SQL.100).aspx
古い SQL を使用している場合 は、 Erick Sasseによって提案されたJeremiah Clark のソリューションで問題 ありません。
SQL Server には、ハイエンドの RDBMS、ストアド プロシージャ、トリガー、UDF などのすべての機能があります。ご存じのとおり、MS SQL Server は Sybase から正確に分岐したため、共通のルートを持っています。
もちろん、いくつかのロジックを含み、いくつかの条件に応じて INSERT または UPDATE を実行する SQL ステートメントを持つことができます。または、レコードが既に見つかっている場合、TSQL は SQL Server の SQL 方言であり、これをサポートしています。などなど。
声明について具体的な質問や疑問がある場合は、現在 SA にある声明を提示してください。