如何在临时表中添加Null Value记录?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在临时表中添加Null Value记录?相关的知识,希望对你有一定的参考价值。

我有一个表'AgentEventStats',它有代理ID及其名称。我在数据集中使用此表,该数据集提取代理名称以使用Stats报告的参数。 (这是为了我的报告排除那些代理)。

但是,我必须为该参数选择一个代理,否则我的报告将无效。这意味着如果我不想排除任何代理,(NULL值)我无法运行该报告。

所以,我想,我会在包含AgentEventStats记录的临时表中插入Null值。

我尝试了什么:

    SELECT DISTINCT AgentReporting, AgentFirstName + ' ' + AgentLastName [AgentName]
    INTO #AgentStats    -- First, creating the temp table.
    FROM AgentEventStats
    WHERE MidnightStartDate >= dateadd(day, -60, getdate())--'2017-01-01'
    AND MidnightStartDate <  getdate() --dateadd(day,1,'2017-03-13')
    ORDER BY AgentName

    INSERT INTO #AgentStats (AgentReporting, AgentName)  --Then, inserting the Null value in that temp table.
    VALUES ('100', 'No Agents');

这不起作用。我收到一条错误消息:

数据库中已经有一个名为“#AgentStats”的对象。

有人建议我改用Union All。有人可以指导我吗?

答案

如果您在同一连接中运行代码不止一次,您将收到该错误。

快速修复:将DROP TABLE #AgentStats添加到脚本的末尾。

然后只运行该行一次(删除临时表)。

然后你可以反复运行整个脚本而不会出错。在删除之前添加SELECT * FROM #AgentStats以查看表中的内容。

另一种方法是首先检查临时表是否存在,然后在运行脚本的其余部分之前删除它。像这样:

IF OBJECT_ID('tempdb..#AgentStats') IS NOT NULL 
    DROP TABLE #AgentStats

SELECT DISTINCT...

如果你这样做,你将不再需要DROP TABLE了。

希望这可以帮助你。

编辑

UNION解决方案。

SELECT DISTINCT AgentReporting, AgentFirstName + ' ' + AgentLastName [AgentName]
FROM AgentEventStats
WHERE MidnightStartDate >= dateadd(day, -60, getdate())--'2017-01-01'
AND MidnightStartDate <  getdate() --dateadd(day,1,'2017-03-13')
UNION ALL -- added ALL based on comment
SELECT '100', 'No Agents'
ORDER BY 2;

以上是关于如何在临时表中添加Null Value记录?的主要内容,如果未能解决你的问题,请参考以下文章

如何在截断并保留 ID 列值后从临时表中重新插入记录

如何在数据表中选择包含新添加记录的行,类似于列表框?

如何解析列并向表中添加更多记录?

如何删除没有临时表的 MySQL 表中的所有重复记录

错误记录Kotlin 编译报错 ( Not nullable value required to call an ‘iterator()‘ method on for-loop range )(代码片

当value为NULL时,更新一行中的单个列