【发布时间】:2018-11-05 10:33:40
【问题描述】:
我有三个不同列数的表。例如 T1(C1)、T2(C1、C2、C3)、T3(C1、C4)。我想生成一个动态 SQL,它将创建一个类似
的视图 CREATE VIEW [dbo].[vwData]
AS
SELECT C1,NULL AS C2,NULL AS C3,NULL AS C4
FROM DBO.T1
UNION ALL
SELECT C1,C2,C3,NULL AS C4
FROM DBO.T2
UNION ALL
SELECT C1,NULL AS C2,NULL AS C3,C4
FROM DBO.T3
我通过使用两个嵌套循环来实现这个目标,方法是检查每一列是否存在于表中。
但是在生产中,我们有大约 30 个表,每个表中大约有 60 列。
创建动态 SQL 大约需要 7 分钟,这对我们来说是不可接受的。我们希望进一步提高性能。
我们将不胜感激立即提供帮助。
【问题讨论】:
-
请花一分钟时间阅读How to Ask和edit您的问题。我们需要查看您现有的代码,而不仅仅是最终结果。
-
您试图用类似的方法解决的实际潜在问题是什么?我无法想象为什么包含所有表的数据的视图可能会有帮助
-
您是否在多个表中存储相同/相关的数据?
-
你几乎是正确的。我们希望将所有表中的所有数据放入一个视图中,但它们的列数略有不同。所以当我合并所有表时,我看到了错误。为了解决这个问题,我创建了动态 SQL 来检查表中是否存在列。如果表中没有列,我将其添加为 NULL AS Col。
-
我们可以假设如果两个表有一个共享名称的列,它们也有一个共享定义吗?或者
table1可以将字段Id设置为bigint而table2将Id设置为uniqueidentifier(例如)?
标签: sql-server tsql dynamic-sql