[ad_1]
XMLファイルをアップロードするためのアップロードボタンがあるC#aspページがあります:
次に、xml を選択してグリッド ビューで表示できます。これは正常に機能しています。
既にアップロードされているファイルをアップロードするたびに、重複レコードの検証でxmlファイルを拒否します。
xml データを一時テーブルに挿入し、メイン テーブルをチェックするストアド プロシージャを作成しました。同じデータが既に存在する場合は、それらのデータを削除します。
ここで、重複データがあることを示す検証メッセージが必要です。
どうすればいいのですか?
私が試したこと:
私はsprocを持っています
alter PROCEDURE xmldata @xml XML , @c_id varchar(100) AS create table #XMLTable ( ID int identity, [a] varchar(50), [b] varchar(50), [c] varchar(50) ) BEGIN SET NOCOUNT ON; INSERT INTO #XMLTable SELECT C.value('(a/text())[1]','VARCHAR(max)') AS [a], C.value('(b/text())[1]','VARCHAR(max)') AS [b], C.value('(c/text())[1]','VARCHAR(max)') AS [c] FROM @xml.nodes('/xyz/C')AS TEMPTABLE(C) delete #XMLTable from #XMLTable xt inner join main_table mt on xc.[a] = mt.[a] AND xc.[b]=mt.[b] AND xc.[c]=mt.[c] INSERT INTO main_table select * from #XMLTable END
データの重複の検証を追加する必要があります
(raise error) エラー検証表示をスローしますが、sproc をどのように変更すればよいですか?
解決策 1
まず、delete ステートメントが機能しません エラー: The multi-part identifier "xc.a" could not be bound.
エイリアスは次のいずれかである必要があります xc
テーブル用や xt.
列の場合。 例えば
delete #XMLTable from #XMLTable xc inner join main_table mt on xc.[a] = mt.[a] AND xc.[b]=mt.[b] AND xc.[c]=mt.[c]
次に、テーブルエイリアスを使用しているため、一貫性を保ち、それらのエイリアスを全体で使用することをお勧めします。
delete xc from #XMLTable xc inner join main_table mt on xc.[a] = mt.[a] AND xc.[b]=mt.[b] AND xc.[c]=mt.[c]
おそらく、検証メッセージを追加する最も簡単な方法は、sproc から出力パラメーターを返すことです。
, @DupsFound int OUTPUT
重複をテストします 前 それらを削除するなど
SELECT @DupsFound = COUNT(*) FROM main_table mt inner join #XMLTable xc on xc.[a] = mt.[a] AND xc.[b]=mt.[b] AND xc.[c]=mt.[c]
@dupsfound が > 0 の場合、UI レイヤーはメッセージを表示する必要があります。
余談ですが、毎回一時テーブルを作成するのではなく、永続的な「ステージング」テーブルを作成してみませんか
最後に、あなたは ID
一時テーブルの ID フィールド – main_table にも ID ID 列がある場合は、使用する必要があります
INSERT INTO main_table select [a],[b],[c] from #XMLTable
* は使用しないでください。自動的に入力される ID 列が含まれるためです。
[ad_2]
コメント