SQL 将动态列 headers 与另一个静态表列进行比较的查询

SQL Query to compare dynamic column headers with another static tables columns

我目前使用 SSIS 将文件动态导入 SQL table,部分过程将源文件中的列 headers 导入到 header 的第一行 table (table 下面1个).

然后我想比较 table 1 中的 headers 与具有静态列的 table 2,最重要的是突出显示 headers 中的任何列 table 1 不存在于 table 2.

例如 Table 1 看起来像这样:

Column 1 Column 2
CustomerID CustomerName

并且 table 2 具有静态列 header,如下所示:

CustomerID CustomerName
1 Joe
2 Daniel

所以基本上当我加载一个文件并添加一个新列 header(在此示例中假设添加了 CustomerLocation)并加载到 table 1 时,我想要一个 SQL 查询以比较 2 table 并突出显示 CustomerLocation 列 missing/does 当前不存在于 table 2 中。

我在考虑使用 sys table 进行比较。

您当然可以使用 sys.columns 到 return 表 2 中的静态列,并将它们与表 1 中的动态列进行比较,然后在您的 select 上使用 UNPIVOT第一行。

我发现将这一切包装在一个 T-SQL 块中并在比较之前将两个列表插入临时表要容易得多,因为数据类型冲突(可能通过使用 CAST 解决)

BEGIN
  DECLARE @table1 TABLE (colname VARCHAR(MAX))
  DECLARE @table2 TABLE (colname VARCHAR(MAX))

  INSERT INTO @table1 SELECT COLNAME FROM (SELECT a, b, c FROM TABLE1 WHERE...first row condition) a UNPIVOT (COLNAME FOR COLS IN ([a],[b],[c])) a

  INSERT INTO @table2 SELECT CAST (name  AS NVARCHAR(100)) name FROM sys.columns WHERE object_id = OBJECT_ID('TABLE2')


  SELECT a.colname cols1, b.colname cols2 
    FROM @table2 a
    FULL OUTER JOIN @table1 b ON (a.colname = b.colname)
END

您可以轻松地将最后的 select 更改为您想要的 return