Member 13066157 Ответов: 1

Как избежать дублирования в моей таблице SQL-im с помощью хранимой процедуры...


Каждый раз, когда я загружаю свой xml-файл, он не обновляет мои предыдущие данные, а скорее дублирует их. как проверить наличие существующих элементов и заменить их в случае каких-либо изменений вместо того, чтобы иметь их в дубликатах? Спасибо

Что я уже пробовал:

USE [MyHelpDesk]
GO
/****** Object:  StoredProcedure [dbo].[InsertXML]    Script Date: 06/09/2017 14:38:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[InsertXML]
	@xml XML
		
AS
BEGIN
	
	 SET NOCOUNT ON
                    
      INSERT INTO HelpDesk
      SELECT
      
      DocID.value('(Module/text())[1]','VARCHAR(max)') AS Module, --TAG
      DocID.value('(SubModule/text())[1]','VARCHAR(max)') AS SubModule, --TAG
      DocID.value('(Title/text())[1]','VARCHAR(max)') AS Title, --TAG
      DocID.value('(SubTitle/text())[1]','VARCHAR(max)') AS SubTitle, --TAG
 FROM
      
      @xml.nodes ('/BackOffice/DocID')AS TEMPTABLE(DocID)
      
	
END

F-ES Sitecore

google "sql избегайте дубликатов данных", и вы найдете множество примеров этого. Пожалуйста, сделайте фундаментальное исследование, прежде чем задавать вопрос.

ZurdoDev

Если существует (напишите инструкцию select, чтобы узнать, существуют ли данные)
НАЧАТЬ
ОБНОВЛЕНИЕ...
КОНЕЦ
ЕЩЁ
НАЧАТЬ
ВСТАВЛЯТЬ...
КОНЕЦ


Простой.

1 Ответов

Рейтинг:
1

ZurdoDev

Как уже упоминалось в комментариях, это довольно просто. Вы можете использовать оператор IF EXISTS. Например:

IF EXISTS(SELECT * FROM someTable WHERE someValue = @value)
   BEGIN
     -- it exists so do your UPDATE
   END
ELSE
   BEGIN
      -- it does not exist.  Do an insert here.
   END