代码之家  ›  专栏  ›  技术社区  ›  Stephen Turner

不带动态SQL的每月查询表数据

  •  2
  • Stephen Turner  · 技术社区  · 7 年前

    一位供应商凭借其无穷的智慧,决定将假日数据集按月拆分为单独的表,即。

    holidayPlanner.dbo.holiday_201802
    holidayPlanner.dbo.holiday_201803
    holidayPlanner.dbo.holiday_201804
    holidayPlanner.dbo.holiday_201805
    

    一旦员工请求当月休假,系统就会生成这些表格。我可以编写一个查询,使用动态SQL创建一个可以使用的联合查询。

    在没有动态SQL的情况下,有什么方法可以做到这一点吗?理想情况下,我可以创建一个表值函数来得到结果?

    1 回复  |  直到 7 年前
        1
  •  0
  •   arce.est    7 年前

    您可以使用一个table函数,返回在每个待识别表中获得的值作为结果(您可以按月份进行搜索)

    我留下以下例子:

    CREATE FUNCTION [dbo].[ufnHolidays]()
    RETURNS @holidays TABLE 
    (
        id int
    )
    AS 
    BEGIN
    
        /* example data
        CREATE TABLE #holiday_201802 (id int)
        CREATE TABLE #holiday_201803 (id int)
        CREATE TABLE #holiday_201804 (id int)
    
        INSERT #holiday_201802 VALUES (1)
        INSERT #holiday_201803 VALUES (2)
        INSERT #holiday_201804 VALUES (3)
        */
    
        IF OBJECT_ID('tempdb.dbo.#holiday_201802') IS NOT NULL
            INSERT @holidays
            SELECT id FROM #holiday_201802
        IF OBJECT_ID('tempdb.dbo.#holiday_201803') IS NOT NULL
            INSERT @holidays
            SELECT id FROM #holiday_201803
        IF OBJECT_ID('tempdb.dbo.#holiday_201804') IS NOT NULL
            INSERT @holidays
            SELECT id FROM #holiday_201804
        RETURN;
    END;
    
    GO