【问题标题】:View using dynamic tables使用动态表查看
【发布时间】:2019-02-01 03:28:29
【问题描述】:

如何将以下查询转换为可以用来创建视图的内容。

create view hourlyBilling_view as
declare @sql varchar(max)
set @sql = ''
select @sql = @sql + case len(@sql) when 0 then '' else ' UNION ALL ' end + '
  SELECT * FROM [' + table_name + '] where line_item_6 is not null ' 
from
  information_schema.tables where table_name like 'Billing_trap_2019%'
exec (@sql) 

它给我一个关于无法使用声明的错误。

我在网上查了一下,觉得有可能,但我没有 SQL 技能来解决这个问题。

【问题讨论】:

  • 您根本无法在视图中使用动态 SQL。
  • 如果存储过程不合适,通常的方法是动态构造视图文本(例如,生成CREATE / ALTER VIEW 语句并执行该语句)。如果涉及的表发生变化,则需要重做;您可以将其作为工作的一部分。所有这一切都是假设这些 billing_trap_2019% 表应该首先存在,而不是您只是将数据放在 one billing_trap_2019 表中(如果需要,可以使用额外的列来区分来源)。跨度>
  • 这有xy problem的所有迹象

标签: sql sql-server sql-view


【解决方案1】:

不可能在视图中使用动态 sql,甚至是表值函数。最接近您想要的是存储过程。

【讨论】:

    猜你喜欢
    • 2012-03-01
    • 2015-03-18
    • 2020-12-23
    • 2012-09-08
    • 2014-05-27
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多