请考虑以下示例:
CREATE VIEW VW_YearlySales AS SELECT 2011 AS YearNo,ProductID,SUM(Amount) FROM InvoiceTable2011 UNION ALL SELECT 2012 AS YearNo,SUM(Amount) FROM InvoiceTable2012 UNION ALL SELECT 2013 AS YearNo,SUM(Amount) FROM InvoiceTable2013 GO
InvoiceTable2013实际上并不存在,我现在不想创建它,它将在记录2013年的第一张发票时自动创建.
在执行UNION ALL之前,任何人都可以帮助我如何指定一个条件来验证表的存在吗?
非常感谢您的帮助.
解决方法
正如其他人所说的那样,你无法用视图实现这一点,因为select语句必须引用一组具体的表 – 如果它们中的任何一个表不存在,那么查询将无法执行.
在我看来,你的问题更为根本.显然,概念上应该只有一个InvoiceTable,其中包含不同日期的行.按年分成不同的逻辑表大概是为了优化而做的事情(除非列不同,我非常怀疑).
在这种情况下,partitioning似乎是解决此问题的方法(按年/季/月分区大表是典型的例子).这将允许您在逻辑上具有单个InvoiceTable,但指定sql Server应该在幕后存储数据,就好像它是按年分割的不同表.您可以获得两全其美 – 精确的模型和快速的性能 – 这使您的视图定义变得简单.