当前位置: 首页 > 面试题库 >

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

濮阳驰
2023-03-14
问题内容

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

谢谢,马特


问题答案:

您遇到的问题不是您正在填充临时表,而是试图 创建
表。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 Server坚持认为临时表已经存在!一个或另一个将会发生!,所以永远不会这样。 错误是:数据库中已经有一个名为“#temp1”的对象。 有没有解决这个问题的优雅方法?如果@checkvar为null,我要整个表,否则,只给我其中@checkvar =某物的值 编辑:该列是varchar,而不是int。 问题答案: 您不能只重写语句吗?

  • 问题内容: 这似乎很简单,但我坚持使用简单的insert语句。请参见以下内容: 在临时表行中,实际列表是从其他位置动态拉出的(这是出于演示目的)。我收到以下错误消息: 错误代码:1054。“字段列表”中的未知列“ insert_table.resource_id” 现在,我可以在整个temp表上运行一次select,它返回正常值,只是在update语句中失败。我正在MySQL工作台上运行它。完全不

  • 问题内容: 我有一个看起来像的xml列 我需要将XML中的数据插入到临时表中。 这里 为此,我使用以下代码。但是它不起作用,也没有在临时表中插入任何数据。 但这不起作用,如果正确的xml格式如下所示: 然后就可以了。 请帮我。 问题答案: 首先-请 使用适当的数据类型! 如果您的源数据是XML-为什么不使用数据类型? 另外,如果您的表中有一个-为什么不输入a或类型呢?而为什么是一个?? 没有意义.

  • 本文向大家介绍SQL Server 向临时表插入数据示例,包括了SQL Server 向临时表插入数据示例的使用技巧和注意事项,需要的朋友参考一下 这样就可以成功。 会提示error "There is already an object named '#DirtyOldWIPBOM' in the database" 为什么? [笔记]:千万不要用游标,用临时表和表变量代替游标会极大的提高性能,

  • Msg 7330,级别16,状态2,第1行 无法从链接服务器“(null)”的OLE DB访问接口“BULK”中获取行。 有什么想法吗?谢谢你。

  • 问题内容: 我有一个输出当前数据的现有查询,我想将其插入到Temp表中,但是这样做有一些问题。有人会对如何执行此操作有一些见解吗? 这是一个例子 这似乎当前以我需要的方式输出我的数据,但我想将其传递到临时表中。我的问题是我对SQL查询还很陌生,还没有找到一种方法来做到这一点。或者,即使有可能。如果不可能,是否有更好的方法将我要查找的数据获取到临时表中? 问题答案: