将表的行值与另一个表的列值进行比较,如果为true,则表示true或false

时间:2016-08-03 16:46:41

标签: sql sql-server

我有两个表我需要将表1中的行值与表2的列名进行比较,如果它们匹配,那么需要将表2的行值更新为true,用于与表的行值匹配的列名1.如果它们不匹配则应使用false进行更新。

任何指针都受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

您可以使用INFORMATION_SCHEMA视图获取列名称:

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 ('+@columns+'
) as pvt'

EXEC sp_executesql @query

最好使用动态SQL自动添加所有列名,而不是手动分配。

答案 1 :(得分: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')