タイプXMLのパラメータを取るようにストアドプロシージャを定義します (ntext
は使用しないでください もう!非推奨です)。また、sp_
は使用しないでください ストアドプロシージャのプレフィックス-これはMicrosoftによる内部使用のために予約されたプレフィックスであり、パフォーマンスの低下を引き起こします-他のものを使用してください! (またはプレフィックスをまったく使用しないでください)
ALTER procedure [dbo].InsertCmsUser
@xmlString XML
AS
......
これを試してください(ネイティブを使用) SQLServerのXQueryメソッド2005 かなり厄介なOPENXML
の代わりに、より新しい インターフェイス....):
;WITH CTE AS
(
SELECT
ContactID = XTbl.value('(ContactID)[1]', 'int'),
FirstName = XTbl.value('(first_name)[1]', 'varchar(50)'),
LastName = XTbl.value('(last_name)[1]', 'varchar(50)'),
Company = XTbl.value('(company)[1]', 'varchar(50)')
FROM
@input.nodes('/NewDataSet/Table') AS XD(XTbl)
)
INSERT INTO
dbo.Seg_RecipientsTemp (ContactID, first_name, last_name, company, last_updated)
SELECT
ContactID,
FirstName,
LastName,
Company,
GETDATE()
FROM
CTE
WHERE
NOT EXISTS (SELECT * FROM dbo.Seg_RecipientsTemp WHERE ContactID = CTE.ContactID)
email
が見つかりませんでした XMLの属性-どこから取得したいかわからない....
更新: わかりました。<last_updated>
もあるようです。 実際のの要素 XML ....
<last_updated>2012-09-12T22:59:10.813+05:30</last_updated>
これはDATETIMEOFFSET
のように見えます 私にとって-+05:30
があるので タイムゾーンの追加。
その場合は、代わりに次のコードを使用してください:
;WITH CTE AS
(
SELECT
ContactID = XTbl.value('(ContactID)[1]', 'int'),
FirstName = XTbl.value('(first_name)[1]', 'varchar(50)'),
LastName = XTbl.value('(last_name)[1]', 'varchar(50)'),
Company = XTbl.value('(company)[1]', 'varchar(50)'),
LastUpdated = XTbl.value('(last_updated)[1]', 'datetimeoffset')
FROM
@input.nodes('/NewDataSet/Table') AS XD(XTbl)
)
INSERT INTO
dbo.Seg_RecipientsTemp (ContactID, first_name, last_name, company, last_updated)
SELECT
ContactID,
FirstName,
LastName,
Company,
LastUpdated
FROM
CTE
WHERE
NOT EXISTS (SELECT * FROM dbo.Seg_RecipientsTemp WHERE ContactID = CTE.ContactID)