【问题标题】:Use Varchar variable in FROM statement在 FROM 语句中使用 Varchar 变量
【发布时间】:2023-03-07 11:10:01
【问题描述】:

我想知道在务实地给 Varchar 变量一个值之后,是否有办法在 From 语句中使用该变量?我们有可以循环退出和重新进入的存档表。因此,该表可能会丢失几天,并且当它们循环返回时,它们会将表名称更改为以当前年份结尾(例如,012015,之前是 012014。 )因此,我的查询可能会引发对象错误,并且我是团队中唯一了解简单错误以及如何快速修复愚蠢问题的人。下面是我试图开始工作的解决方案,但我不断收到错误“必须声明表变量@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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 这是好东西并且有效,但是似乎我无法将 EXEC(@qry) 中的这些数据插入临时表或以任何方式将其联合...有可能吗到 UNION 或存储来自 EXEC 的数据...还是只能显示结果?
    • 没关系...我刚刚创建了一个表并使用了 INSERT INTO #MyTempTable,就在 EXEC 命令的正上方...工作得很好
    • 感谢 Alex A。您通过上述答案将我引向了正确的方向。让我的代码完全符合我现在的要求......
    • 我很高兴有帮助!您可以在文本字符串 "SET @qry = 'INSERT INTO #MyTempTable SELECT * FROM ' +@jan EXEC @qry" 中构建和执行任何类型的查询
    猜你喜欢
    • 2012-09-12
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 2015-01-27
    • 2015-07-28
    • 1970-01-01
    相关资源
    最近更新 更多