SSMSから呼び出されたときに非常にうまく機能するSPがあります。しかし、ネイティブC ++で記述されたアプリケーションから呼び出し、ODBCを使用してデータベースに接続すると、操作はエラーを返しませんが、実際にはデータベースでは何もしません。
私のSPは、いくつかの一時テーブルからいくつかの値を読み取り、それらをデータベースに挿入するか、更新します。
SPのすべてのコードを保護するトランザクションがSPにありましたが、SPをデバッグすることはほとんどなく、関数が最初の挿入または更新で返されるため、何もしません。したがって、そのトランザクションと機能を部分的に削除します。つまり、いくつかのアイテムを追加しますが、データベースに追加せずにいくつかのアイテムをそのままにしておきます。これが私のSPのスケルトンです:
--トランザクションの開始 DECLARE @id bigint、@ name nvarchar(50) DELETE FROM MyTable WHERE NOT(id IN(SELECT id from #MyTable)) SELECT id、nameFROM#MyTableのcur1カーソルを宣言します OPEN cur1 WHILE 1!= 0 始める FETCH cur1 INTO @ id、@ name IF @@ FETCH_STATUS!= 0 BREAK; UPDATE MyTable SET [Name] = @ name WHERE [id] = @ id @@ ROWCOUNT=0の場合 INSERT INTO MyTable(ID、Name)VALUES(@id、@name) 終わり cur1を閉じる cur1の割り当てを解除する -トランザクションのコミット