-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

他に注意すべき点は、これがトリガーの一部であることです。アイデアは、古いテーブルが更新されたときに新しい値がクリーンアップされ、それらが有効な場合は新しいテーブルに挿入されるというものです。

4

2 に答える 2

1

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

お知らせ下さい。

マック

 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

表:

年:

id  Name             MaritalStatus

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

新着:

id  Name           IsMarried

1   Jack           0
2   Jill           1
3   James          0
4   Mark           1
于 2012-04-21T07:20:26.683 に答える
0

内部/外部クエリとは何にも参加していません。派生テーブル (id) の別のフィールドを返し、それに結合する場合は問題ありません。追加の id フィールドを追加する前に、case ステートメントを終了する必要があります。

于 2012-04-20T23:52:41.407 に答える