我将使用MERGE来插入或更新表,这取决于它是否存在。这是我的问题,
declare @t table
(
    id int,
    name varchar(10)
)
insert into @t values(1,'a')
MERGE INTO @t t1
USING (SELECT id FROM @t WHERE ID = 2) t2 ON (t1.id = t2.id)
WHEN MATCHED THEN
    UPDATE SET name = 'd', id = 3
WHEN NOT MATCHED THEN
    INSERT (id, name)
    VALUES (2, 'b');
select * from @t;结果是,
id  name
1   a我觉得应该是,
id  name
1   a
2   b发布于 2013-07-03 20:04:14
正如Mikhail所指出的,USING子句中的查询不包含任何行。
如果要执行upsert,请将新数据放入USING子句:
MERGE INTO @t t1
USING (SELECT 2 as id, 'b' as name) t2 ON (t1.id = t2.id) --This no longer has an artificial dependency on @t
WHEN MATCHED THEN
    UPDATE SET name = t2.name
WHEN NOT MATCHED THEN
    INSERT (id, name)
    VALUES (t2.id, t2.name);发布于 2013-07-03 20:03:27
您的USING部分稍微有点混乱,这就是您想要匹配的内容的位置(尽管在本例中您只使用id)
declare @t table
(
    id int,
    name varchar(10)
)
insert into @t values(1,'a')
MERGE INTO @t t1
USING (SELECT 2, 'b') AS t2 (id, name) ON (t1.id = t2.id)
WHEN MATCHED THEN
    UPDATE SET name = 'd', id = 3
WHEN NOT MATCHED THEN
    INSERT (id, name)
    VALUES (2, 'b');
select * from @t;发布于 2013-07-03 19:56:58
此查询不会返回任何内容:
SELECT id FROM @t WHERE ID = 2因为where在表中没有ID = 2的行,所以没有东西可以合并到表中。
此外,在MATCHED子句中,您正在更新您正在连接表的字段ID,我认为这是被禁止的。
https://stackoverflow.com/questions/17447127
复制相似问题