每个月都在不使用 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)
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)