MARS(複数のアクティブな結果セット)の欠点を知っている人はいますか?カーソルがMARSよりも便利な場合のように、MARSの使用を避けるべき理由を誰かが知っていますか。
回答:
明らかに少なくとも2つの既知の(潜在的な)欠点があります(この(1)チームブログから):
明らかに、これは、MARS対応の設計に対して実行するように設計されていないレガシーシステムに潜在的な問題を引き起こす可能性があります- 「MARS以外の世界で実行するように最適化された既存のコードは、MARSで変更せずに実行すると、わずかなパフォーマンスの低下を示す可能性があります」
「MARSを使用すると、複数のマルチステートメントバッチをサーバーに送信できます。サーバーはそのようなバッチの実行をインターリーブします。つまり、バッチがたとえばSETまたはUSEステートメントを介してサーバーの状態を変更したり、TSQLトランザクション管理ステートメント(BEGIN TRAN、COMMIT、ROLLBACK)を使用したりすると、ユーザーとサーバーの両方が混乱する可能性があります。あなたの実際の意図が何であるかについて。」
MARS対応の設計はまだ試していませんが、現在のプロジェクトで試すことに非常に近づいています。競合する(場合によっては依存する)クエリ操作にわずかな問題があります(アクティブなレコードセットが実行しているのと同じデータベースから構成データを遅延ロードするなど)。
詳細については、MSDNサイト(2)を参照してください。
[(1) http://blogs.msdn.com/sqlnativeclient/archive/2006/09/27/774290.aspx ]
[(2)http://msdn.microsoft.com/en-us/library/ms131686.aspx ]
何に応じて?本当の不利な点はありません。
トランザクションのセーブポイントはサポートしていません。しかし、私はこれを不利だとは思いません。