首页 > 解决方案 > 插入同一张表的 SQL IF 语句

问题描述

我需要根据我们接收数据的方式查询存储在两个不同 SQL 模式中的数据集。我创建了两个查询来查看数据集 1 和数据集 2,并将该数据格式化为两个单独的临时表(格式相同)。

我现在正在尝试执行第二步,即确定已填充哪个临时表,将这些数据放入一个新的临时表中,以便继续执行第 3 步。

为此,我正在尝试创建一个 IF 语句来计算我们收到的数据集,但似乎无法使查询工作(即使我已经从其他人的类似查询中看到了解决方案)。

这是我的代码:

IF object_id('tempdb..#Final_Prem') IS NOT NULL 
BEGIN 
    DROP TABLE #Final_Prem 
END

DECLARE @Command varchar(500)

DECLARE @DS1 AS FLOAT
DECLARE @DS2 AS FLOAT

SET @DS1 = (SELECT SUM(PREM) FROM #Dataset1 )
SET @DS2 = (SELECT SUM(PREM) FROM #Dataset2 )

IF (@DS1 IS NULL OR @DS1 = 0)
BEGIN
    SET @Command = 'SELECT * INTO #Final_Prem FROM #Dataset2'
END ELSE BEGIN
    SET @Command = 'SELECT * INTO #Final_Prem FROM #Dataset1'
END

EXECUTE (@Command)

SELECT * FROM #Final_Prem

我不断收到的错误是

消息 208,级别 16,状态 0,第 18 行
无效的对象名称“#Final_Prem”

任何帮助将不胜感激,谢谢

标签: sqlsql-server

解决方案


您不能在动态查询中使用单哈希表。运行动态查询的会话与外部会话不同,因此无法访问它。

如果您确定每次都会运行一次 proc/query,则可以将 # 表更改为 ##table。

如果要同时使用动态 sql 和并发运行,可以将 @@SPID 保存到变量中,并在 ## 表名的末尾使用它。


推荐阅读