すべての列をリストせずに、ソース (リンクされた Oracle サーバー) からターゲット テーブル (SQL Server 2012) に非常に広いテーブルをマージしようとしています。両方のテーブルは、それらのレコードを除いて同一です。これは私が使用しているものです:
TRUNCATE TABLE TargetTable
INSERT INTO TargetTable
SELECT *
FROM SourceTable
これが機能するとき/場合は、更新を行うために必要なソース、ターゲット、および一致キーを渡すことができるように、それを手順にしたいと思います。今のところ、私はそれをまったく機能させたいと思っています。
USE ThisDatabase
GO
DECLARE
@Columns VARCHAR(4000) = (
SELECT COLUMN_NAME + ','
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'TargetTable'
FOR XML PATH('')
)
MERGE TargetTable AS T
USING (SELECT * FROM SourceTable) AS S
ON (T.ID = S.ID AND T.ROWVERSION = S.ROWVERSION)
WHEN MATCHED THEN
UPDATE SET @Columns = S.@Columns
WHEN NOT MATCHED THEN
INSERT (@Columns)
VALUES (S.@Columns)
私の初心者を許してください。まだ半分しか進んでいないような気がしますが、SQL のいくつかの部分を十分に理解していないため、すべてをまとめることができません。どうもありがとう。