2012-04-20 7 views
-3

最初のテーブルのデータを使用してテーブルを更新しようとしています。私はこのようなものを書こうとしています:ケーススタディからの更新

-- Create the temp tables 
DROP TABLE #MyNewTable 
CREATE TABLE #MyNewTable 
    (
    UserId int IDENTITY(1, 1) 
       NOT NULL, 
    MarriedFlag bit NOT NULL 
    ) 

DROP TABLE #MyOldTable 
CREATE TABLE #MyOldTable 
    (
    UserId int IDENTITY(1, 1) 
       NOT NULL, 
    Married nvarchar(50) NULL 
    ) 

-- Insert test values 
INSERT INTO #MyOldTable 
     ([Married]) 
VALUES ('married'), 
     ('married'), 
     ('not married'), 
     ('maybe married') 
GO 

-- First pass will do nothing as there is no data in #MyNewTable 
UPDATE #MyNewTable 
SET  [MarriedFlag] = CASE I.[Married] 
          WHEN 'married' THEN 1 
          ELSE 0 
         END 
FROM [#MyOldTable] AS I, 
     [#MyOldTable] AS O 
WHERE I.[UserId] = O.[UserId] 

-- Will insert 4 values into #MyNewTable 
SET IDENTITY_INSERT [#MyNewTable] ON 

INSERT INTO #MyNewTable 
     ([UserId], 
     [MarriedFlag]) 
     SELECT I.[UserId], 
       CASE I.[Married] 
        WHEN 'married' THEN 1 
        ELSE 0 
       END 
     FROM [#MyOldTable] AS I 
     WHERE I.[UserId] NOT IN (SELECT [UserId] 
            FROM  [#MyNewTable]) 

SET IDENTITY_INSERT [#MyNewTable] OFF 

SELECT * 
FROM [#MyOldTable] 

-- #MyOldTable Expected Output 
UserId Married 
1 married 
2 married 
3 not married 
4 maybe married 

SELECT * 
FROM [#MyNewTable] 

-- #MyNewTable Expected Output 
UserId MarriedFlag 
1 1 
2 1 
3 0 
4 0 

これはトリガーの一部であることに注意してください。考えられるのは、古いテーブルが更新され、新しい値がクリーンアップされ、有効であれば新しいテーブルに挿入されるということです。

+0

"** **ノー行く" 手段」私たちのより多くの何を言っていません** no go ** "と答えています。 – usr

+0

エラーが表示されますか?結婚式の種類は何ですか? –

+0

この質問は前提です。 – FlavorScape

答えて

0

あなたは内部/外部クエリで何かに参加していません。派生テーブル(ID)に別のフィールドを返して、それに参加すれば問題ありません。余分なIDフィールドを追加する前に、caseステートメントを終了する必要があります。

1

これを試してください。私はあなたがしたいことを知っていると思う。これにより、説明的な値の代わりにIsMarriedフラグを持つ新しいテーブルが作成されます。

私に知らせてください。

MAC

SELECT OLD.id 
    , OLD.[Name] 
    , CASE (OLD.MaritalStatus) 
      WHEN 'Married' then 1 
     ELSE 
      0 
     END AS IsMarried 
INTO dbo.newTable 
FROM dbo.oldTable AS OLD 

TABLES:

OLD:

id Name    MaritalStatus 

1 Jack    Divorced 
2 Jill    Married 
3 James   Single  
4 Mark    Married 

NEW:

id Name   IsMarried 

1 Jack   0 
2 Jill   1 
3 James   0 
4 Mark   1 
+0

ええ、それはアイデアです。私は上記の私の例を更新し、意図を説明しようとしました。 –

関連する問題