2016-08-03 1 views
2

2つのテーブルがありますテーブル1の行の値とテーブル2のカラムの名前を比較し、一致する場合はテーブルを更新する必要があります2行の値は、表1の行の値と一致する列名に対してtrueと表示されます。一致しない場合は、falseで更新する必要があります。テーブルの行の値と別のテーブルの列の値とを比較し、trueまたはfalseと答えた場合

いずれのポインタも高く評価されています。

あなたはカラム名を取得するためにINFORMATION_SCHEMAビューを使用することができます

答えて

1

CREATE TABLE ##temp (
    column_name nvarchar(max), 
    [flag] int 
) 

INSERT INTO ##temp 
SELECT COLUMN_NAME, 0 
FROM YourDB.INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'YOURTableName' 

UPDATE t 
SET [flag] = CASE WHEN a.ColumnToCheck IS NULL THEN 0 ELSE 1 END 
FROM ##temp t 
LEFT JOIN anotherTable a 
    ON t.column_name = a.ColumnToCheck 

その後、あなたのテーブルと更新に参加し、その後、ピボット:

DECLARE @columns nvarchar(max), @query nvarchar(max) 

SELECT @columns =STUFF((
SELECT ','+column_names FROM ##temp FOR XML PATH('')),1,1,'') 

SELECT @query=' 
SELECT * 
FROM ##temp 
PIVOT (
    MAX([flag]) for column_name in ('[email protected]+' 
) as pvt' 

EXEC sp_executesql @query 

ベターはなく、自動的にすべての列名を追加するには、動的SQLを使用します手作業で割り当てる。

0

おそらく

UPDATE TABLE2 
SET FLAG_Column = 'TRUE' 
WHERE NAME_Column IN (
    Select c.name FROM sys.columns c JOIN sys.objects o ON 
    c.object_id = o.object_id 
    WHERE o.name = 'TABLE1') 
関連する問題