sql - 插入和 *
问题描述
我正在尝试执行一系列表格比较,其中每个表格代表给定日期的数据提取。随着时间的流逝,表中的字段数量增加了。除了越来越多的字段外,这些表的结构相同,所有新字段都被添加为最右边的字段。
为此,我试图将每个表中的数据移动到本地临时表中,我可以在其中索引它们并多次查询它们。
总结版本如下。它将从其他地方以编程方式调用,并多次填充日期数字:
IF OBJECT_ID('tempdb..##direct_RISK') IS NULL
BEGIN
SELECT TOP 0 * INTO ##direct_risk FROM DATA_20191231
END
ELSE
DELETE FROM ##direct_RISK
IF OBJECT_ID('tempdb..##direct_lead') IS NULL
BEGIN
SELECT TOP 0 * INTO ##direct_lead FROM DATA_20200131
END
ELSE
DELETE FROM ##direct_lead
IF OBJECT_ID('DATA_20210801') IS NOT NULL INSERT INTO ##direct_lead SELECT * FROM DATA_20200131
INSERT INTO ##direct_risk SELECT * FROM DATA_20191231
在完整版本中,还为每个表添加了一个索引,并将一个过滤器应用于 SELECT 查询。
是否有某种方法可以维护这个简单的结构,而无需命名所有字段,当字段数量不同时,这些字段在 INSERT 阶段不会中断?
解决方案
对于语法:
SELECT TOP 0 * INTO ##direct_risk FROM DATA_20191231
要为每个源表或视图工作,您需要具有相同的列。
我认为一个更简单的解决方案是创建一组视图,每个表一个,在这些视图中您将添加稍后创建的列,例如:
CREATE VIEW DATA_20191231_Normalized AS
SELECT
S.col1,
S.col2,
CAST(null as int) AS new_col3
FROM DATA_20191231 AS S
然后,所有视图将为您的脚本预设相同的模式。
推荐阅读
- reactjs - 故事书不适用于带有 webpack + babel 的 node7?
- javascript - 如何在js中制作父子json树
- solace - com.solacesystems.jms.SolConnection.mClientID 字段是如何默认设置的?
- r - 如何将数据框转换为规则(arules 包)?
- spring - JPA - 如何通过连接实体查询?
- graphql - 使用 graphql 在“null”字段上使用 @skip
- visual-studio-2017 - 也尝试使项目正确运行
- python - 正则表达式匹配时间。or : 和一个可能的单个数字开头
- javascript - 是否有更好的方法来查找迭代器是否已达到其最后一个值?
- debian - Debian motd 显示待定更新