2017-11-10 4 views
0

は、私はこのようになりますMERGE文を持っている:SQL Server:動的列を使用してどのようにマージできますか? SQL Serverの2016年に

MERGE dbo.MyTable AS TARGET 
USING (SELECT * FROM dbo.StageTable) 

WHEN MATCHED 
    THEN 
     UPDATE SET target.[StartTime] = source.[UnknownColumn] 

sourceの表は、ランダムに生成された順序で列が含まれています。つまり、targetテーブルの「StartTime」列は、Column1またはColumn2またはColumn3などと等しいことができますが、列のどこかに「StartTime」という単語が常に含まれます。

ソース表の正しい列の位置がわからない場合は、どのようにしてターゲット列を正しい列に設定できますか?私が正しい列について知っているのは、特定の文字列が含まれているということだけです。

+0

私の研究によると、ここではCONTAINSが便利かもしれないが、どのように使用するのかはわかりません – james5

答えて

0

動的なT-SQL文を使用する必要があります。このようなもの:

DECLARE @DynamicTSQLStatement NVARCHAR(MAX) 
     ,@ColumnName SYSNAME; 

SELECT @ColumnName = [name] 
FROM [sys].[columns] 
WHERE [object_id] = OBJECT_ID('[dbo].[StackOverflow]') 
    AND [name] LIKE '%StartTime%'; 


SET @DynamicTSQLStatement = N'MERGE dbo.MyTable AS TARGET 
USING (SELECT * FROM dbo.StageTable) 

WHEN MATCHED 
    THEN 
     UPDATE SET target.[StartTime] = source.[' + @ColumnName + '];'; 

EXEC sp_executesql @DynamicTSQLStatement; 
関連する問題