0

XML を使用してテーブルにデータを挿入するのはこれが初めてです。フロント エンド (すべての Datagridview 行) からのデータを xml ファイルに保存し、それをデータベースに送信してテーブル SD_ShippingDetails に挿入します。以下はクエリです。クエリからわかるように、関連する ShippingID の詳細を削除し、再度挿入しています (DELETE FROM SD_ShippingDetails WHERE ShippingID=@ShippingID)。 XML からのデータ。はいの場合、クエリを手伝ってください。

CREATE PROCEDURE SD_Insert_ShippingDetails    
@PBMXML as varchar(Max),      
@ShippingID as INT      

AS      
BEGIn      


declare @i int      

exec sp_xml_preparedocument @i output,@PBMXML      



DELETE FROM SD_ShippingDetails WHERE ShippingID=@ShippingID      


INSERT INTO  SD_ShippingDetails(ShippingID,Weight,Height,TotalBoxes,Price)      
SELECT ShippingID,Weight,Height,TotalBoxes,Price FROM OPENXML(@i,'Root/ShippingBox',2)      
WITH (      
ShippingID int,Weight varchar(20),Height varchar(20),TotalBoxes varchar(20),Price numeric(18,2))    



exec sp_xml_removedocument @i      

END 

ありがとう。

4

3 に答える 3

0

Sql Server 2005 を使用している場合は、値を #temp または @variables テーブルに配置するのが最適です。

2008 年以降では、MERGE 機能を利用することができました。

http://msdn.microsoft.com/en-us/library/bb522522(v=sql.105).aspx

これは、xml シュレッディングの適切なリンクです。古いバージョンの OPENXML を使用していることに注意してください。これは、より Sql Server 2000 のコマンドでした。2005 年以降の構文については、以下の Plamen のブログを確認してください。

http://pratchev.blogspot.com/2007/06/shredding-xml-in-sql-server-2005.html

于 2013-03-19T18:41:26.283 に答える
0

XML を変数テーブルに入力してから、UpdateStatement とInsertNot Exists.

SQL 2008 を使用している場合は、delete ステートメントと insert ステートメントを次のように置き換えることができます...

MERGE   SD_ShippingDetails AS Target
USING  (SELECT  ShippingID,
                Weight,
                Height,
                TotalBoxes,
                Price 
        FROM    OPENXML(@i,'Root/ShippingBox',2)      
                WITH   (ShippingID int,
                        Weight varchar(20),
                        Height varchar(20),
                        TotalBoxes varchar(20),
                        Price numeric(18,2)) ) AS source (ShippingID,Weight,Height,TotalBoxes,Price)
        ON (target.ShippingID = source.ShippingID)
WHEN    MATCHED THEN 
        UPDATE  SET Weight = source.Weight,
                    Height = source.Height,
                    TotalBoxes = source.TotalBoxes,
                    Price = source.Price
WHEN    NOT MATCHED THEN    
        INSERT (ShippingID,Weight,Height,TotalBoxes,Price)
        VALUES (source.ShippingID,source.Weight,source.Height,source.TotalBoxes,source.Price);
于 2013-03-19T18:45:03.903 に答える