テーブルをフォームから XML にパッケージ化し、それを SQL Server 2008 R2 データベースのストアド プロシージャに送信するバインドされていないアクセス インターフェイスがあります。
送信される XML は次のようになります。
<maps>
<map>
<gmapId>1396</gmapId>
<citation>Gray, Carlyle; Shepps, V.C.; Conlin, R.R.; Hoskins, D.M.; Shaffner, M.N.; Socolow, A.A.; McLaughlin, D.B.; Geyer, A.R.; Cate, A.S.; Lytle, W.S.; Bergsten, J.M.; Miller, J.T.; Wood, G.H., Jr.; Arndt, H.H.; Kehn, T.M., 1960, Geologic map of Pennsylvania (1960), Pennsylvania Geological Survey, Map, 1:250000 scale</citation>
<use>no</use>
</map>
</maps>
多くの場合、複数 (>100) のマップ要素があります。
私のストアド プロシージャには、xml を一時テーブルにアンボックスし、その一時テーブル情報を使用してデータベース内のいくつかのテーブルを更新するコードがあります。
そのコードは次のようになります。
INSERT INTO dbo.#mapsXref (npsUnitCode, gmapIdF, useForThisPark, citation)
SELECT @unitCode As npsUnitCode,
T.item.value('gmapId[1]','INT') As gmapIdF,
T.item.value('use[1]','VARCHAR(10)') As useForThisPark ,
T.item.value('citation[1]', 'VARCHAR(MAX)') As citation
FROM @mapsList.nodes('maps/map') AS T(item)
監査テーブルを使用して、XML が適切にパッケージ化され、適切な情報が表示され、一時テーブルが正しく入力されていることを確認できます。
INSERT INTO dbo.mapsXrefAudit(npsUnitCode, gmapIdF, useForThisPark, citation)
SELECT npsUnitCode, gmapIdF, useForThisPark, citation from dbo.#mapsXref
これは、一時テーブルに入るものをすべてキャッチし、サーバーへのデータの送信と XML 文字列の適切なアンパックを検証することを可能にします。
最初の更新は機能します:
UPDATE map.XREF_GMAP_ID_TRANSLATIONS
SET useForThisPark = t.useForThisPark
FROM map.XREF_GMAP_ID_TRANSLATIONS x INNER JOIN dbo.#mapsXref t
ON x.gmapIdF = t.gmapIdF WHERE x.npsUnitCode = t.npsUnitCode
しかし、ストアド プロシージャが一時テーブルを使用して別のテーブルを更新すると、次のようになります。
UPDATE map.TBL_GMAPS
SET reference = t.citation
FROM dbo.#mapsXref t INNER JOIN map.TBL_GMAPS g
ON g.gmapId = t.gmapIdF
アップデートは に表示されませんmap.TBL_GMAPS
。
別の SQL Server 2008 R2 インスタンスで数年間機能していました (現在、DBA から古いビルド # を取得しようとしています。取得できれば、その情報で更新します)。
数週間前、サーバーの大失敗があり、データベースはビルド 10.50.4000 を実行する新しいサーバーに移行されました。前述のアクセスアプリケーションのさまざまな部分でアクセス許可に関するエラーがスローされるため、一連のオブジェクトレベルのアクセス許可を再設定する必要がありましたが、現在、これらの問題は発生していないようです. 何か問題が発生した場合にロールバックしてエラーメッセージを生成するトランザクションにビット全体をラップしました。しかし、コミット時にエラーは発生しません。
パラメータとトランザクション コード以外のストアド プロシージャのほとんどの部分について説明しました。フルバージョンはこちら: https://gist.github.com/anonymous/5536290
map.TBL_GMAPS
私のテーブルで更新が行われない理由を誰か知っていますか?