2014-05-14 26 views
0

我有作为输入传递给批量插入的存储过程的xml。我的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

您可以做一个MERGE如果数据不存在,如果它是将更新凹口 - 将插入。

如果这不适合你,你也可以尝试从XML插入到临时表中,然后从临时表中插入到分析where tempTable.ItemName NOT IN(SELECT ItemName FROM Analytics)(假设我正确理解了你,ItemName将会不同于所有的分析)

+0

Itemname是唯一的基于站ID's.I我有相同的itemname目前在不同的站,如站ID为1有物品名301和STAN2也有301.如果这两个站在同一时间点击服务器。 – Sangeetha