【问题标题】:Insert if data not exists using stored procedure with xml as input如果数据不存在,则使用以 xml 作为输入的存储过程插入
【发布时间】:2014-05-14 06:16:06
【问题描述】:

我有 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 时插入,检查是否存在相同的数据然后防止插入。 需要检查条件,如果这个 itemname 存在于这个日期,那么没有插入。

问候

【问题讨论】:

    标签: xml stored-procedures sql-server-2008-r2


    【解决方案1】:

    您可以执行MERGE-- 如果数据不存在则插入,如果存在则更新。

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

    【讨论】:

    • Itemname 根据站 ID 是唯一的。我在不同站中存在相同的 itemname,例如站 id 1 具有 itemname 301 并且 stan2 也具有 301。如果这两个站同时访问服务器。跨度>
    猜你喜欢
    • 2013-12-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 2018-09-17
    • 1970-01-01
    相关资源
    最近更新 更多