我有xml作为输入传递给批量插入的存储过程。我的xml如下,
NewDataSet>
- <Table1>
<StationId>1</StationId>
<DateOfEvent>2013-11-15</DateOfEvent>
<Year>2013</Year>
<WeekOfYear>46</WeekOfYear>
<MonthOfYear>11</MonthOfYear>
<ItemType>CATEGORY</ItemType>
<ItemName>10234</ItemName>
<Clicks>1</Clicks>
<SiteName>sandvikas</SiteName>
</Table1>
我编写了一个存储过程,如下所示,
ALTER PROCEDURE [dbo].[InsertQuestion]
(
@XmlQuestionMeasurements xml
)
AS
BEGIN
DECLARE @docHandle int
EXEC sp_xml_preparedocument @docHandle OUTPUT, @XmlQuestionMeasurements
--insert data in to EP_QuestionMeasurement table
Insert into Analytics(StationId,DateOfEvent,Year,WeekOfYear,MonthOfYear,ItemType,ItemName,Clicks,SiteName)
SELECT StationId,DateOfEvent,Year,WeekOfYear,MonthOfYear,ItemType,ItemName,Clicks,SiteName
FROM Openxml( @docHandle, '/NewDataSet/Table1', 2)
WITH ( StationId int,DateOfEvent date, Year int ,WeekOfYear int,MonthOfYear int, ItemType VARCHAR(50),ItemName VARCHAR(50),Clicks int,SiteName VARCHAR(50) )
END
它的插入效果很好。现在我的问题是如何修改存储过程以防止插入,如果再次传递相同的xml集,要检查是否存在相同的数据,然后阻止插入。 需要检查条件,如果此项目名称在此日期中存在,则无法插入。
此致
答案 0 :(得分:0)
您可以执行MERGE - 如果数据尚未存在则会插入,如果数据存在则会更新。
如果这不适合你,你也可以尝试从XML插入临时表,然后从临时表插入到分析where tempTable.ItemName NOT IN(SELECT ItemName FROM Analytics)
(假设我正确理解你{{1} }对于所有分析而言将是独特的)