あなたがこれを行うには、T-SQLのMERGE文を使用することができます。 HallSeatテーブルにインポートされている行セットと一致します。行が存在しない場合は、新しい行が挿入されます。行が存在し、違いがある場合は、行を更新できます。最初にこのことを実証するためにhttps://msdn.microsoft.com/en-GB/library/bb510625.aspx
、 -
(あなたが削除アクションを行うにはしたくないかもしれませんが、私は完全を期すため、それが含まれている。)
参照オンラインブック> MERGE(のTransact-SQL) 2つのテーブルを作成します。
CREATE TABLE dbo.HallSeat
(
HallGroupID int NOT NULL,
ShowSeatID int NOT NULL,
Color nvarchar(15) NOT NULL,
Price int NOT NULL,
SeatRow int NOT NULL,
SeatNumber int NOT NULL,
IsReserved bit NOT NULL,
CONSTRAINT PK_HallSeat PRIMARY KEY CLUSTERED (HallGroupID, ShowSeatID)
);
CREATE TABLE dbo.ImportHallSeat
(
HallGroupID int NOT NULL,
ShowSeatID int NOT NULL,
Color nvarchar(15) NOT NULL,
Price int NOT NULL,
SeatRow int NOT NULL,
SeatNumber int NOT NULL,
IsReserved bit NOT NULL,
CONSTRAINT PK_ImportHallSeat PRIMARY KEY CLUSTERED (HallGroupID, ShowSeatID)
);
その後ImportHallSeatテーブルにXMLデータファイルをインポートします。
-- Read the XML data file to be imported
DECLARE @xml xml;
SELECT @xml = x.a
FROM OPENROWSET(BULK 'F:\Work\Data.xml', SINGLE_BLOB) AS x(a);
TRUNCATE TABLE dbo.ImportHallSeat;
INSERT INTO dbo.ImportHallSeat(HallGroupID, ShowSeatID, Color, Price, SeatRow, SeatNumber, IsReserved)
SELECT T.C.value('HallGroupID[1]', 'int') AS 'HallGroupID',
T.C.value('ShowSeatID[1]', 'int') AS 'ShowSeatID',
T.C.value('Color[1]', 'nvarchar(15)') AS 'Color',
T.C.value('Price[1]', 'money') AS 'Price',
T.C.value('SeatRow[1]', 'int') AS 'SeatRow',
T.C.value('SeatNumber[1]', 'int') AS 'SeatNumber',
T.C.value('IsReserved[1]', 'bit') AS 'IsReserved'
FROM @xml.nodes(N'/Filharmonija/Hall/HallGroup/HallSeat') as T(C);
その後、我々は、インポートされたデータとHallSeatテーブルを更新することができます。
MERGE
INTO dbo.HallSeat AS H
USING dbo.ImportHallSeat AS I
ON I.HallGroupID = H.HallGroupID AND I.ShowSeatID = H.ShowSeatID
WHEN MATCHED AND H.Color <> I.Color AND H.Price <> I.Price
THEN UPDATE SET H.Color = I.Color, H.Price = I.Price
WHEN NOT MATCHED BY TARGET
THEN INSERT (HallGroupID, ShowSeatID, Color, Price, SeatRow, SeatNumber, IsReserved)
VALUES (I.HallGroupID, I.ShowSeatID, I.Color, I.Price, I.SeatRow, I.SeatNumber, I.IsReserved)
WHEN NOT MATCHED BY SOURCE
THEN DELETE;
が持つデータを表示しますHallSeatテーブルにインポートされました:
SELECT *
FROM dbo.HallSeat;
インポートするサンプルデータを入力します。 –
インポートしたXMLファイルをhttp://s000.tinyupload.com/index.php?file_id=00087989931748177566 – Paulius