【问题标题】:In SQL Dynamic view is possible? [duplicate]在 SQL 动态视图中是可能的吗? [复制]
【发布时间】:2020-03-15 00:45:26
【问题描述】:

其实我知道如何在 SQL 中创建视图。但我被这个案例困住了。

我的一个数据库每月创建表。例如表名是TL202001TL202002TL202003,所以下个月的新表将是TL202004。所有表都有相同的列。但是数据的差异我想为所有这些动态表生成一个视图。但我不知道如何为未来的表格制定逻辑。让我知道这种情况下查看是可能的,让我知道您的解决方案。

请帮忙!

我再解释清楚,

例子:

  • 我的数据库名称是 TAS
  • TAS 数据库中,每个月都会通过一个软件创建一个新表

例如:

T_LG202001
T_LG202002
T_LG202003
T_LG202004 etc...

我想为所有这些表一起创建一个视图。它还需要考虑未来月份的表格。

select * 
from T_LG202001,T_LG202002,T_LG202003.........T_LG202030 etc.

请告诉我。现在你明白了。我需要知道 View 是可能的吗?如果可能的解决方案,请告诉我。

【问题讨论】:

  • 考虑表分区,而不是动态视图。
  • 视图中不允许使用动态 SQL,但您可以动态创建视图。看看stackoverflow.com/questions/41807327/sql-dynamic-pivot-table/…
  • Dynamic Table Names in Application Code - 属性作为表名/自制分区的一部分
  • 老实说,你有这样的表格听起来像是一个设计缺陷。如果可以的话,你应该规范化你的数据。
  • 听起来你对月表的数据定义会不时变化。所以这不仅仅是数据分区,还有版本控制......我认为除非你能为新表提供可能的“逻辑更改”样式,否则没有人能提供帮助。

标签: sql sql-server tsql


【解决方案1】:

首先它不是最好的设计。 Dynamic Table Names in Application Code - 属性作为表名的一部分/自制分区


仅当您无法返工当前设置时的解决方法:

每次有新表或按月计划重新创建视图:

DECLARE @create_view_sql NVARCHAR(MAX);

SELECT @create_view_sql = N'CREATE OR ALTER VIEW my_combined_view AS ' +  
       STUFF(STRING_AGG(FORMATMESSAGE('UNION ALL SELECT * FROM %s.%s'
     ,QUOTENAME(TABLE_SCHEMA), QUOTENAME(TABLE_NAME))
    , CHAR(13)) WITHIN GROUP(ORDER BY TABLE_NAME), 1,10,'')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'TL2[0-9][0-9][0-9][0-9][0-9]I'
  AND TABLE_TYPE = 'BASE TABLE'
  --AND TABLE_SCHEMA = ...;

PRINT @create_view_sql;

EXEc sp_executesql @create_view_sql;

db<>fiddle demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-01
    • 2010-12-29
    • 2017-09-18
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多