将值连接到静态 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 已创建。