【发布时间】:2019-10-21 01:27:56
【问题描述】:
我有两个数据集:
- 一个是关于狗的数据 [我的数据]
- 第二个是匹配键的查找表 [我无法控制此数据]
匹配的键会定期更新,我想创建 Dog 数据集的视图(或实现相同目的的东西),它总是加入 最新的匹配键。此外,我需要能够内联引用它 - 就好像它是一个表格。
查找表中的匹配更新由它们的架构名称来区分,因此要获取最新的,我只需识别最新的架构名称并将其从查询中换出。
鉴于视图和表值函数都禁止动态 SQL,并且无法像表一样引用存储过程,我如何仅在 SQL 中实现这一点?
【问题讨论】:
-
您不能在视图中使用动态 SQL,因为视图只能包含
SELECT语句;毕竟VIEW只是一个预编译SELECT语句。这里的问题似乎是您的数据库的设计。为什么每次更新数据时都要创建新对象(架构和表)? -
我不是,那是我无法控制的数据库部分。
-
您可能需要创建一个作业(可能是 SQL 代理)来监视外部更改并在需要时更新视图或将所需数据的副本加载到数据库中。
-
无论哪种方式,恐怕您都无法使用“仅 SQL”实现您所追求的目标,您必须使用动态 SQL 才能动态查询正确的表。否则,如果不能,理想情况下需要修复数据库的设计。
-
“只是 SQL”是指不必使用另一种编程语言。如果有办法将动态 SQL 与视图或 TableValuedFunctions 集成,那么它会很好,但情况似乎并非如此。
标签: sql sql-server tsql dynamic table-valued-parameters