【发布时间】:2015-10-12 01:48:35
【问题描述】:
我在 3 年前使用 DB2 做到了这一点,但不记得是如何做到的。
我想要做的就是更新/插入记录到表中。我不想测试它的存在并更改我的 DML,而是想使用参数化的插入/更新(合并)T-SQL 语句来做到这一点。我相信程序编译器优化器将使这成为最有效的方法。
USE [MY_DB]
GO
/****** Object: Table [dbo].[map_locations] Script Date: 10/11/2015 9:29:26 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[map_locations](
[loc_min_lat] [varchar](5) NOT NULL,
[loc_min_lng] [varchar](6) NOT NULL,
[loc_id] [int] NULL,
[center] [varchar](20) NOT NULL CONSTRAINT [DF__map_locs__call___5E4ADDA8] DEFAULT (''),
CONSTRAINT [PK__map_map_locs__79C80F94] PRIMARY KEY CLUSTERED
(
[map_locations_lat] ASC,
[map_locations_lng] ASC,
[center] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
简单地说,如果记录不违反 PK,我希望能够将记录插入到上表中,但如果记录(从 PK 角度)存在则更新它。
我一直在研究,所有的 MS SQL 示例都是针对两个表合并的。我正在通过参数传入一条记录。
我在 Delphi XE10 工作(这不重要),数据库是 MS SQL 2012。
任何帮助表示赞赏。
【问题讨论】:
标签: sql sql-server delphi merge