将值连接到静态 SQL 中的 table
Concatenate a value to a table in static SQL
我有一个要求,我需要将一个值连接到 table 名称。
要求如下:
DECLARE @TableName varchar(50);
SET @TableName = (SELECT 'TableName' + CONVERT(varchar(50), 2019));
PRINT @TableName;
SELECT * FROM @TableName
我不想使用动态 sql 查询
谁能提出解决这个问题的方法。
如果您有 table 编码年份,您就会遇到问题。您应该只有一个 table 和 所有 数据。那么你可以 select 年份:
select t.*
from t
where year = 2019;
就是说,有时您会被其他人非常非常非常糟糕的决定所困。如果是这样,代码如下所示:
DECLARE @SQL nvarchar(MAX);
SET @SQL = CONCAT('SELECT * FROM TableName', 2019);
EXEC SP_EXECUTESQL @SQL;
这对你有用吗?
select table_name + '_' + CONVERT(varchar(50), round(rand()*1000,0) ) 来自 information_schema.tables
创建包含所有可能 table 的视图 - 添加年份列。然后使用该视图根据年份进行查询。
Create View dbo.YearView As
Select Year = 2018, {all other columns} From dbo.Table2018
UNION ALL
Select Year = 2019, {all other columns} From dbo.Table2019
UNION ALL
Select Year = 2020, {all other columns} From dbo.Table2020
用作:
Select * From dbo.YearView Where Year = 2019;
然后您可以使用动态 SQL 构建一个过程,该过程使用所有可能的 table 重建此视图,并将该代码安排到 运行 新年后每年一次 table 已创建。
我有一个要求,我需要将一个值连接到 table 名称。 要求如下:
DECLARE @TableName varchar(50);
SET @TableName = (SELECT 'TableName' + CONVERT(varchar(50), 2019));
PRINT @TableName;
SELECT * FROM @TableName
我不想使用动态 sql 查询 谁能提出解决这个问题的方法。
如果您有 table 编码年份,您就会遇到问题。您应该只有一个 table 和 所有 数据。那么你可以 select 年份:
select t.*
from t
where year = 2019;
就是说,有时您会被其他人非常非常非常糟糕的决定所困。如果是这样,代码如下所示:
DECLARE @SQL nvarchar(MAX);
SET @SQL = CONCAT('SELECT * FROM TableName', 2019);
EXEC SP_EXECUTESQL @SQL;
这对你有用吗?
select table_name + '_' + CONVERT(varchar(50), round(rand()*1000,0) ) 来自 information_schema.tables
创建包含所有可能 table 的视图 - 添加年份列。然后使用该视图根据年份进行查询。
Create View dbo.YearView As
Select Year = 2018, {all other columns} From dbo.Table2018
UNION ALL
Select Year = 2019, {all other columns} From dbo.Table2019
UNION ALL
Select Year = 2020, {all other columns} From dbo.Table2020
用作:
Select * From dbo.YearView Where Year = 2019;
然后您可以使用动态 SQL 构建一个过程,该过程使用所有可能的 table 重建此视图,并将该代码安排到 运行 新年后每年一次 table 已创建。