首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于MERGE,唯一索引有关问题,求解

2013-07-21 
关于MERGE,唯一索引问题,求解!IF OBJECT_ID(ta) IS NOT NULLDROP TABLE taCREATE TABLE ta(id int)INSER

关于MERGE,唯一索引问题,求解!


IF OBJECT_ID('ta') IS NOT NULL
    DROP TABLE ta
CREATE TABLE ta(id int)

INSERT INTO ta
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1 

IF OBJECT_ID('tb') IS NOT NULL
    DROP TABLE tb
CREATE TABLE tb(id int)

--唯一索引,忽略重复
CREATE UNIQUE INDEX idx_id ON tb(id) WITH(IGNORE_DUP_KEY=on)

MERGE INTO TB AS B
USING ta AS A ON A.id=B.id
WHEN NOT MATCHED THEN
INSERT(id) values(A.id);


--这里直接报错了,很诧异,为什么?

/*
(5 行受影响)
消息 2601,级别 14,状态 1,第 19 行
不能在具有唯一索引 'idx_id' 的对象 'dbo.tb' 中插入重复键的行。
语句已终止。
*/


DROP TABLE ta
DROP TABLE TB
merge 唯一索引 insert
[解决办法]
--确定目标表
MERGE INTO TB AS B
--从数据源查找编码相同的id
USING ta AS A ON A.id=B.id
--如果目标表中不存在,则从数据源插入目标表
WHEN NOT MATCHED THEN
INSERT(id) values(A.id);

这里为什么插入不成功,是因为TB表里面从来没有数据,它是一次性操作,相当于一个事务,而不是一条一条操作,所以插入不成功
我这么理解的
[解决办法]
MERGE INTO 插入不成功
[解决办法]
merge 会忽略IGNORE_DUP_KEY 设置
练级丛书有说的,自己去看看
[解决办法]
俺们一直使用
GUID
作为主键

热点排行