我正处于十字路口。有人可以帮助我......让我沿着正确的道路前进。
我想比较/显示来自2个数据库表的数据,如下所示:
应用程序数据库:许多表都有触发器,可以将更新/删除更改(审核)复制到另一个数据库。
审核数据库:从应用程序数据库中的触发器复制的信息
我想做的事应该相当简单。在下面,我想要做的是比较数据进行了哪些更改。
我有一个带有CROSS APPLY
和UNIONS
的工作版本(它很长并且手动输入了列,表等等)。列不是动态的,这使得数百行代码变得粗糙且无法管理。必须有一个更优雅的设计。请任何想法。
我只需要从两个表中返回一个特定的行(ID)进行比较。
APP DB
colA colB colC colD
1 hello foo date
APP Audit DB
colA colB colC colD
1 hi bar date
这就是希望输出的内容:
colA_data ColumnName oldData newData
1 colB hi hello
1 colC bar foo
1 colD date date
我希望我已经理解了我想要完成的任务。
我想读取列名称动态(不是很难),然后将结果并排放置,就像报告原因一样。显然匹配列并将它们放入行中。
示例代码将非常受欢迎。
答案 0 :(得分:0)
最简单的事情可能是使用protected function attemptLogin(Request $request)
{
// here you can check if user is present or just create.
return $this->guard()->attempt(
$this->credentials($request), $request->filled('remember')
);
}
:
这里介绍UNPIVOT
的使用是一个简单的静态版本,可以解决你的问题:
UNPIVOT
结果:
现在是完整版。您可以使用动态SQL更改从SQL Server declare @appDB table( [colA] int, [colB] nvarchar(50),[colC] nvarchar(50),[colD] nvarchar(50))
declare @auditDB table( [colA] int, [colB] nvarchar(50),[colC] nvarchar(50),[colD] nvarchar(50))
insert into @appDB select 1,'hello', 'foo', 'date'
insert into @auditDB select 1,'hi', 'bar', 'date'
select old.ColA_data, old.ColumnName, old.OldData, new.NewData
from(
select o.colA as ColA_data, o.ColumnName, o.OldData
from @auditDB s
unpivot ([OldData] for [ColumnName] in ([colB], [colC], [colD])) o
) OLD
inner join
(
select n.colA as ColA_data, n.ColumnName, n.NewData
from @appDB t
unpivot ([NewData] for [ColumnName] in ([colB], [colC], [colD])) n
) NEW
on new.ColA_data = old.ColA_data and new.ColumnName = old.ColumnName
元数据中检索它们的列。
请注意,在此示例中,我添加了一个新列(INFORMATION_SCHEMA
)
ColE
结果: