我有一张如下表格:
Table AuditLog(
Reference varchar(10) [primary key],
TableName varchar(10),
ModifiedColumn varchar(10),
ChangeData varchar(max),
TableReference varchar(10)
)
我正在尝试实现以下查询:
select *,
(select accountNumber from [AuditLog.TableName] where Reference = AuditLog.TableReference )
from AuditLog
AuditLog
表格列' TableName
'包含该数据库的表名。我需要在TableReference
上从该表格中加载accountnumber。
我需要创建一个带查询的视图。以动态填充表名的正确方法是什么?
答案 0 :(得分:1)
这应该让你开始:
DECLARE @SQL varchar(max)
SET @SQL = SELECT 'SELECT accountNumber
FROM '+ TableName +'
INNER JOIN AuditLog ON Reference = AuditLog.TableReference'
FROM AuditLog
WHERE <condition>
EXEC(@SQL)
注意:动态sql需要付出代价,包括安全隐患和性能问题。
在这种情况下,由于没有涉及用户输入,因此暴露于sql注入攻击的可能性很小(除非有人篡改auditLog
表)。
可能更好的选择是简单地将auditLog
表的值accountNumber
添加到其保留的其他值,然后直接查询它。