在FROM语句中使用Varchar变量

时间:2015-04-19 06:51:14

标签: sql-server-2008 variables select varchar declare

我想知道在实际给出Varchar变量值之后是否有办法在From语句中使用该变量?我们有存档表,它会循环输出。因此,表可能会丢失几天,当它们重新循环时,它们会将表名更改为当前年份(例如012015之前的012015)。 )因此我的查询可能会引发对象错误,而我是团队中唯一了解简单错误以及如何快速修复愚蠢事情的人。下面是我试图开始工作的解决方案,但我不断收到错误"必须声明表变量@Jan。"我完全理解表变量是什么以及如何使用它,这显然不是我想要做的。有没有办法在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

1 个答案:

答案 0 :(得分:1)

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

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

EXEC (@qry)