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
我目前使用 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