Sql 从具有动态计算名称的表中选择

Sql 从具有动态计算名称的表中选择,sql,sql-server,Sql,Sql Server,我想写一个查询,名称表将在其中进行动态计算。我有下面这样的代码。我应该在“魔法代码”区域中放置什么 DECLARE @myTableName nvarchar(100) = 'sch' + CAST(@nowYear as VARCHAR(5)) + 'Q' + CAST(@nowQuarter as VARCHAR(3)) + '.[tVisits]' -- magic code -- myTable =

我想写一个查询,名称表将在其中进行动态计算。我有下面这样的代码。我应该在“魔法代码”区域中放置什么

DECLARE @myTableName nvarchar(100) = 'sch' 
         +  CAST(@nowYear as VARCHAR(5)) 
         +  'Q' 
         +  CAST(@nowQuarter as VARCHAR(3)) 
         +  '.[tVisits]'

-- magic code --
myTable = DoSomething(@aktTableName)   
-- magic code --

SELECT * FROM myTable

我使用MS SQL Server 2012

您需要使用动态SQL-

DECLARE 
      @nowYear INT = 2013
    , @nowQuarter INT = 1

DECLARE @myTableName NVARCHAR(100) = '[sch' 
         +  CAST(@nowYear AS VARCHAR(5)) 
         +  'Q' 
         +  CAST(@nowQuarter AS VARCHAR(3)) 
         +  '].[tVisits]'

DECLARE @SQL NVARCHAR(MAX) = N'SELECT * FROM ' + @myTableName

EXEC sys.sp_executesql @SQL

从myTable中选择*而不是

你需要像这样做

DECLARE @sql nvarchar(4000)
SELECT @sql = ' SELECT * FROM ' + @myTable -- @myTable is a string containing qualified table name
EXEC sp_executesql @sql

请注意,sp_executesql允许参数化查询-检查

您将需要动态SQL尽管动态SQL确实解决了您的问题,但我认为更好的数据结构可能会更有帮助。似乎有多个表具有相同的列。您最好使用一个表
sch
,该表的列为yaer和quarter。