在 FROM 语句中使用 Varchar 变量

Use Varchar variable in FROM statement

我想知道是否有办法在实用地为 Varchar 变量赋值后,在 From 语句中使用该变量?我们有存档 tables,它们会循环退出并返回。因此,table 可能会丢失几天,当他们循环返回时,他们会更改 table 名称以结束 w/当前年份(例如 012015,之前是 012014。)因此,我的查询可能会抛出对象错误,而且我是团队中唯一了解简单错误以及如何快速修复愚蠢问题的人。下面是我试图开始工作的解决方案,但我不断收到错误 "Must declare the table variable @Jan." 我完全理解 table 变量是什么以及如何使用它,这显然不是我想要的在这里做。有没有办法在 From 语句中使用 varchar 变量(或其他类似的变量类型)?代码如下:

Declare @Jan Varchar(40)

IF OBJECT_ID('ColTelephonyArchive.dbo.ACDSkill201401') IS NOT NULL
Begin
    Set @Jan = 'ColTelephonyArchive.dbo.ACDSkill201401'
 END

     IF OBJECT_ID('ColTelephonyArchive.dbo.ACDSkill201501') IS NOT NULL
        Begin
            Set @Jan = 'ColTelephonyArchive.dbo.ACDSkill201501'
        END

            IF @Jan IS NULL
                Begin
                    Set @Jan = 'Does.Not.Exist'
                END

Select WorkDte, SwitchNbr, SkillNbr,StaffTimeInSec, AvailableTimeInSec, ACDCallTotCt 
        ,AbandonCallTotCt, AbandonCall1Ct, AnswerTimeInSec, ACDTalkTimeInSec,TotAcwTimeInSec, HoldTimeInSec 
FROM @Jan

如果我解决了您的问题,您需要构建动态查询。所以在你的情况下它将是

DECLARE @qry VARCHAR(511)
SET @qry = 'Select WorkDte, SwitchNbr, SkillNbr,StaffTimeInSec, AvailableTimeInSec, ACDCallTotCt 
    ,AbandonCallTotCt, AbandonCall1Ct, AnswerTimeInSec, ACDTalkTimeInSec,TotAcwTimeInSec, HoldTimeInSec 
FROM ' + @Jan

EXEC (@qry)