从另一个查询结果中获取表名

时间:2015-06-05 19:31:20

标签: sql sql-server sql-server-2008 sql-server-2005

我有一张如下表格:

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。

我需要创建一个带查询的视图。以动态填充表名的正确方法是什么?

1 个答案:

答案 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添加到其保留的其他值,然后直接查询它。