[英]SQL Server XML queries
我正在嘗試為此任務找到解決方案:編寫一個接受 XML 文檔的程序,格式如下:
<Buyer N="John" S="Doe" CTY="Madrid" CTR="Spain">
<E>John.Doe@gmail.com</E>
<T>123456789</T>
</Buyer>
該程序必須驗證您的數據庫是否已經包含國家、城市或買家(通過電子郵件檢查買家)。
如果您的數據庫中缺少任何數據,您的過程必須將其插入到表中。
調用顯示上述過程功能的函數。
這就是我開始分離所有重要事物的方式:
CREATE PROCEDURE pXML
@var XML
AS
SELECT
X.U.value('@N', 'nvarchar(20)') AS pName,
X.U.value('@S', 'nvarchar(20)') AS pSurename,
X.U.value('@CTY', 'nvarchar(20)') AS pCity,
X.U.value('@CTR', 'nvarchar(20)') AS pCountry
FROM
@var.nodes('/Buyer') AS X(U)
SELECT X.U.value('.', 'nvarchar(50)' ) AS pEmail
FROM @var.nodes('/Buyer/E') as X(U)
我不知道如何在該過程中放置 IF 語句或任何必要的條件。
我的偽代碼是:
declare @temp nvarchar(30)
set @temp = pEmail
IF NOT EXISTS(select * from Buyers where Buyer.Email = pEmail)
INSERT INTO Buyer values (pName, pSurename, pCity, pCountry)
(more IF NOT EXISTS statements for city and for country)
有人願意在這里幫我一把嗎?
在此先感謝,如果不夠清楚,請告訴我。 我會盡力添加任何需要的信息。
請嘗試以下解決方案。
它使用MERGE
語句來處理基於 email 的INSERT
或UPDATE
。
SQL
-- DDL and sample data population, start
DECLARE @Buyer TABLE (
ID INT IDENTITY PRIMARY KEY,
pEmail NVARCHAR(100),
pName nvarchar(20),
pSurename nvarchar(20),
pCity nvarchar(20),
pCountry nvarchar(20)
);
INSERT INTO @Buyer (pEmail, pName, pSurename, pCity, pCountry) VALUES
(N'John.Doe@gmail.com', N'John', N'Doe', N'Madrid', N'Spain');
-- DDL and sample data population, end
-- before
SELECT * FROM @Buyer;
DECLARE @var XML =
N'<Buyer N="Johnny" S="Doe" CTY="Barcelona" CTR="Spain">
<E>John.Doe@gmail.com</E>
<T>123456789</T>
</Buyer>';
MERGE INTO @Buyer as Trg
USING (
SELECT c.value('(E/text())[1]', 'nvarchar(100)') as pEmail
, c.value('@N', 'nvarchar(20)') as pName
, c.value('@S', 'nvarchar(20)') as pSurename
, c.value('@CTY', 'nvarchar(20)') as pCity
, c.value('@CTR', 'nvarchar(20)') as pCountry
FROM @var.nodes('/Buyer') AS t(c)
) as Src
ON Trg.pEmail = Src.pEmail
WHEN Matched /*AND Src.pName IS NOT NULL*/ THEN -- if needed to add additional conditions
UPDATE
SET Trg.pName = Src.pName
, Trg.pSurename = Src.pSurename
, Trg.pCity = Src.pCity
, Trg.pCountry = Src.pCountry
WHEN NOT MATCHED THEN
INSERT (pEmail, pName, pSurename, pCity, pCountry) VALUES
(Src.pEmail, Src.pName, Src.pSurename, Src.pCity, Src.pCountry)
OUTPUT
$action ,
inserted.*;
-- after
SELECT * FROM @Buyer;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.