如何解决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中条件的结果填充临时表。两种方法中的临时表都具有相同的结构,但是将根据条件使用不同的查询进行填充。下面的简化示例脚本未能对ELSE
块INSERT
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 举报,一经查实,本站将立刻删除。