2012-03-02 13 views
1

私はmerge文をまだ使用することができないので、私はsql2000(2008年が近づいています!存在する場合insert else update

私は挿入ステートメントを持っていますが、今は更新ステートメントを作成する必要があります。私はif exists insert else文でこれをラップしたいと思います。クエリはより長く、より複雑ですが、私はこの基本的なものを使っていくつかの助けを得ることができます、私はすべてを得ることができると思います。 プロジェクト名およびSYSTEMNAMEはそれを更新し、systemdetailテーブルに存在する場合:英語で書き出さ

insert into systemdetail 
    (systemname, projectname, systemtype) 
    select distinct T.systemname, T.projectname, S.model 
     from sysList T, requestSystems S 
     where T.systemname = S.systemname and 
      S.systemname not in 
      (
      select d.systemname, d.ProjectName from systemdetail d,syslist t2 where t2.systemname = d.SystemName and t2.projectname=d.ProjectName 
      ) 

。それ以外の場合は、プロジェクト名とシステム名(およびその他のフィールド)を新しいレコードとして挿入します。

以下はifが存在することを試みたものですが、私は固執しています(質問内の???を参照)。

if (exists (select sd.projectname, sd.systemname from systemdetail sd, sysList t where t.projectname = sd.projectname and t.systemname = sd.systemname) 
    update systemDetail 
    set projectname = t.projectname, 
    systemname = t.systemname 
    where ??? <-- this is where I'm stuck 
else 
    insert into systemdetail 
    (systemname, projectname, systemtype) 
    select distinct T.systemname, T.projectname, S.model 
     from sysList T, requestSystems S 
     where T.systemname = S.systemname and 
      S.systemname not in 
      (
      select d.systemname, d.ProjectName from systemdetail d,syslist t2 where t2.systemname = d.SystemName and t2.projectname=d.ProjectName 
      ) 
+1

あなたはその更新をしている?あなたが最初にチェック同じ値を更新するのはなぜ他のテーブルの上に等しかったので、あなたは何 – Lamak

+0

を更新する必要はありません@Lamak systemDetailはマスタテーブルであり、requestSystemsはセカンダリテーブルであり、ユーザーが何かをシステムに要求します。作業要求が承認されると、requestSystemで提供された詳細がsystemDetailテーブルに「移動」されます。複数のプロジェクト名で同じシステムが存在する可能性があります。 – HPWD

+0

@Lamak @jzworkmanに同意しますか?すでに 'systemname'と' projectname'に一致する行がある場合は 'systemtype'を更新しようとしていますか? – diaho

答えて

2

次のことを試してみてください。

-- Try update first 
UPDATE 
    S 
SET 
    systemtype = X.model 
FROM 
    systemDetail AS S 
JOIN 
(
    SELECT DISTINCT 
     T.systemname, T.projectname, S.model 
    FROM 
     sysList T, requestSystems S 
    WHERE 
     T.systemname = S.systemname 
) AS X 
ON 
    X.systemname = S.systemname 
AND X.projectname = S.projectname 

IF @@ROWCOUNT = 0 
BEGIN 
    insert into systemdetail 
    (systemname, projectname, systemtype) 
    select distinct T.systemname, T.projectname, S.model 
     from sysList T, requestSystems S 
     where T.systemname = S.systemname and 
      S.systemname not in 
      (
      select d.systemname, d.ProjectName from systemdetail d,syslist t2 where t2.systemname = d.SystemName and t2.projectname=d.ProjectName 
      ) 
END 
+0

これをColdFusion内で実行できるかどうかを確認する必要があります。私はそれが私のクエリエディタで動作することに注意する必要があります。 – HPWD

+0

ColdFusionでこれを実行できるように見えます!優れた! – HPWD

+0

私はこれが私が必要とする正しい構文とマークしました。 – HPWD

0

更新ステートメントの問題は、検索している両方の値を更新していることです。プライマリキーを使用してレコードを検索し、そのプライマリキーを持つレコードの他の値を更新する必要があります。レコードの主キーを変更するために更新を呼び出すことはできません。

+0

プロジェクト名とシステム名が一緒になってプライマリキーを作成します。 – HPWD

+0

SQL Serverでは、主キーの更新を許可しています。 –

関連する問題