微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决SQL在If和Else块中插入到临时表中

您遇到的问题不是您正在填充临时表,而是试图 创建 表。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,您似乎必须先声明该表,然后填充它。可能难以编写和支持代码,但是它会足够有效地执行。

解决方法

我正在尝试根据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在条件块中执行语句,但是该表将包含很多列,并且我试图提高效率。那是唯一的选择吗?还是有某种方法可以使这项工作?

谢谢,马特

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。