【问题标题】:Get Table name from another query result从另一个查询结果中获取表名
【发布时间】:2015-06-05 19:31:20
【问题描述】:

我有一张如下表:

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 从该表中加载帐号。

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

【问题讨论】:

  • 将语句构造为文本并使用 EXEC 或 sp_executesql(parameterized)
  • 你需要动态 sql。
  • 我不明白为什么问号为负数? lollzz
  • @Zohar:你能不能给我们举个例子来说明你的答案?
  • 现在真的不能这样做,因为我正在使用我的手机,而且很难编写这样的代码。

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


【解决方案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 表)。

accountNumber 的值与它保留的其他值一起简单地添加到auditLog 表中,然后直接查询它可能是更好的选择。

【讨论】:

  • 我有大约 5000 万行。此动态查询是否会产生任何加载时间问题?除此之外,我需要在视图中使用它。怎么可能?
  • 我认为不可能在视图中使用它。您可能希望将该列添加到 auditLog 表中。
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多