SQL

SQL在If和Else块中插入到临时表中

发布于 2021-05-10 20:46:09

我正在尝试根据SQL
2005中条件的结果填充临时表。两种方法中的临时表都具有相同的结构,但是将根据条件使用不同的查询进行填充。下面的简化示例脚本未能对ELSEINSERT INTO进行语法检查,并出现以下错误:

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

DECLARE @Id int
SET @Id = 1

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

IF (@Id = 2) BEGIN 
    SELECT 'ABC' AS Letters
    INTO #MyTestTable;
END ELSE BEGIN
    SELECT 'XYZ' AS Letters
    INTO #MyTestTable;
END

我可以在IF/ELSE语句之前创建临时表,然后只INSERT SELECT在条件块中执行语句,但是该表将包含很多列,并且我试图提高效率。那是唯一的选择吗?还是有某种方法可以使这项工作?

谢谢,马特

关注者
0
被浏览
53
1 个回答
  • 面试哥
    面试哥 2021-05-10
    为面试而生,有面试问题,就找面试哥。

    您遇到的问题不是您正在填充临时表,而是试图 创建
    表。SQL解析您的脚本,发现您试图在两个不同的地方创建它,因此引发了错误。认识到“执行路径”可能无法同时击中两个创建状态时,还不够聪明。使用动态SQL是行不通的。我试过了

    DECLARE @Command  varchar(500)
    
    DECLARE @Id int 
    SET @Id = 2
    
    IF OBJECT_ID('tempdb..#MyTestTable') IS NOT NULL DROP TABLE #MyTestTable
    
    IF (@Id = 2) BEGIN  
        SET @Command = 'SELECT ''ABC'' AS Letters INTO #MyTestTable'
    END ELSE BEGIN 
        SET @Command = 'SELECT ''XYZ'' AS Letters INTO #MyTestTable'
    END
    
    EXECUTE (@Command)
    
    select * from #MyTestTable
    

    但是临时表只持续与动态会话一样长的时间。所以,a,您似乎必须先声明该表,然后填充它。可能难以编写和支持的代码,但是它会足够有效地执行。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看