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

次の投稿を参照してください: Using a variable for table name in 'From' clause in SQL Server 2008

于 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 に答える