每个月都在不使用 union 的情况下获取数据

Fetch data without using union all every month

Select * from [dbo].[TRNS0119]
union all
Select * from [dbo].[TRNS0219]
union all
Select * from [dbo].[TRNS0319]
union all
Select * from [dbo].[TRNS0419]

在我的 SQL 服务器数据库中,每个月都会创建一个新的 table,其中包含 in/out 条记录。我必须使用 union all 从所有 12 个月的数据中获取数据。我希望我的查询在使用特定名称创建新 table 时自动获取数据。我不是 SA 用户,因此无法进行任何更改/触发器/程序。

到目前为止,我每个月都这样做,但我想知道如何在没有任何干预的情况下每月解决这个问题

试试这个查询。请确保输入参数。

DECLARE @inputYear INT,@tablename VARCHAR(20)=''
SET @inputYear =2019---- year(getdate())

DECLARE @v nvarchar(30)='TRNS%'+right(convert(varchar(4),@inputyear),2)

DECLARE @query nvarchar(max)=''
SELECT @query=@query+' UNION ALL SELECT * FROM ' +  NAME from sys.tables where name like @v
SELECT @query= STUFF(@query,1,10,'')
EXECUTE sp_executesql @query

对于此解决方案,您的动态表中必须有相同的字段。

表名可以是您数据库中的任何内容,这适用于所有表名。

如果你得到了结果,试试这个。

declare @table table([Name] varchar(200))
declare @query VARCHAR(max)
declare @strQuery varchar(max) = '';
set @query='SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES';
insert into @table exec (@query)
--select * from @table (You will get all your table names)

declare @tablename varchar(100)
declare @i int=0

DECLARE curFetchData CURSOR FOR SELECT [Name] from @table
OPEN curFetchData          
    FETCH NEXT FROM curFetchData INTO @tablename
    WHILE @@Fetch_status = 0          
    BEGIN   
        IF(@i>0)        
            set @strQuery = @strQuery + (' UNION ALL ')     
        set @strQuery = @strQuery + (' SELECT * from '+@tablename+' ')
        set @i=@i+1;
    FETCH NEXT FROM curFetchData INTO @tablename
    END 
CLOSE curFetchData
DEALLOCATE curFetchData
PRINT (@strQuery)
EXEC (@strQuery)