1

有人能告诉我为什么这个插入失败但也没有给我错误吗?我该如何解决?

merge table1 as T1
using(select p.1,p.2,p.3,p.4,p.5 from @parameters p
inner join table1 t2
on p.1 = t2.1
and p.2 = t2.2
and p.3 = t2.3
and p.4 = t2.4) as SRC on SRC.2 = T1.2
when not matched then insert (p.1,p.2,p.3,p.4,p.5) 
values (SRC.1,SRC.2,SRC.3,SRC.4,SRC.5)
when matched then update set t1.5 = SRC.5;

T1 表目前是空的,所以没有什么可以匹配的。参数表中确实有数据。我只需要修改这个合并,以便在决定做什么之前检查所有 4 个字段。

4

2 回答 2

0

您不能从变量中进行选择:from @parameters

请参阅以下帖子:在 SQL Server 2008 的“From”子句中为表名使用变量

于 2012-10-27T00:05:54.023 回答
0

实际上,您可以使用变量表。一探究竟:

  MERGE Target_table AS [Target]
  USING @parameters AS [Source]
  ON (

        [Target].col1 = [Source].col1
        AND [Target].col2 = [Source].col2
        AND [Target].col3 = [Source].col3
        AND [Target].col4 = [Source].col4
        )
  WHEN NOT MATCHED BY TARGET
  THEN INSERT (col1,col2,col3,col4,col5)
  VALUES (
              [Source].col1
              ,[Source].col2
              ,[Source].col3
              ,[Source].col4
              ,[Source].col5
                  )
  WHEN MATCHED
  THEN UPDATE SET [Target].col5 = [Source].col5;
于 2012-10-27T18:34:36.380 回答