2014-12-22 121 views
0

我正在开发SQL SERVER 2012 express和开发人员解决方案。如果行存在,行更新。如果行不存在,则插入它

我将在存储过程中收到一个xml。在存储过程中,我将解析xml并将其数据插入到表中。

我在这里的问题是,在这个XML可能包含表中存在的数据,我需要用新的更新上表中的数据。

我不想检查表中是否存在xml中的每一行。

我想我可以用IGNORE_DUP_KEY,但我不知道。

如何更新或不检查其插入新的数据?

这就是我要插入(或更新)的新数据表:

CREATE TABLE [dbo].[CODES] 
(
    [ID_CODE] [bigint] IDENTITY(1,1) NOT NULL, 
    [CODE_LEVEL] [tinyint] NOT NULL, 
    [CODE] [nvarchar](20) NOT NULL, 
    [COMMISIONING_FLAG] [tinyint] NOT NULL, 
    [IS_TRANSMITTED] [bit] NOT NULL, 
    [TIMESPAN] [datetime] NULL, 
    [USERNAME] [nvarchar](50) NULL, 
    [SOURCE] [nvarchar](50) NULL, 
    [REASON] [nvarchar](200) NULL 
    CONSTRAINT [PK_CODES] PRIMARY KEY CLUSTERED 
    (
     [CODE_LEVEL] ASC, 
     [CODE] ASC 
    ) 
) 
+3

我怀疑你想使用['MERGE'(http://msdn.microsoft.com/en-GB/library/bb510625.aspx),虽然这并不符合“不检查它”的标准,但它确实都在一个声明中运行。您可以使用'IGNORE_DUP_KEY',但您的架构需要更多信息来说明如何使用它。 [本文](http://sqlblog.com/blogs/paul_white/archive/2013/02/01/a-creative-use-of-ignore-dup-key.aspx)是一个很好的开始' IGNORE_DUP_KEY'。 – GarethD

+0

@GarethD我已经添加了表格。 – VansFannel

+0

所以阅读本[链接](http://sqlblog.com/blogs/paul_white/archive/2013/02/01/a-creative-use-of-ignore-dup-key.aspx [/链接] 后一切是清楚的。你可以决定现在做什么? – KumarHarsh

回答

1

的“IGNORE_DUP_KEY”参数,是忽略插入新行,如果他是已经存在,但它是如果它存在,则不处理更新。

解决你的请求是MERGE或DML操作(插入/更新/删除)。

BTW, 参数“IGNORE_DUP_KEY”仅覆盖索引关键字的索引(索引列)。

相关问题