最初のテーブルのデータを使用してテーブルを更新しようとしています。私はこのようなものを書こうとしています:
-- 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
他に注意すべき点は、これがトリガーの一部であることです。アイデアは、古いテーブルが更新されたときに新しい値がクリーンアップされ、それらが有効な場合は新しいテーブルに挿入されるというものです。