标签: temp-tables

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

我正在尝试根据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
Run Code Online (Sandbox Code Playgroud)

我可以在IF/ELSE语句之前创建临时表,然后只INSERT SELECT在条件块中执行语句,但是表会有很多列,我试图提高效率.这是唯一的选择吗?或者有一些方法可以使这项工作?

谢谢,马特

sql sql-server-2005 temp-tables insert-into

12
推荐指数
3
解决办法
3万
查看次数

如何找到两列数据之间的差异?

我有一个带有两列整数数据的临时表,我想找到第三列中两列之间的差异.

#TEMP1

Present   previous
59           88
75           75
45           45
77           88
09           08

#temp2

Difference
 29
 0
 0
 11 
 -1
Run Code Online (Sandbox Code Playgroud)

这可能吗 ??

t-sql sql-server temp-tables addition sql-server-2008-r2

12
推荐指数
3
解决办法
13万
查看次数

建议在Entity Framework 4中使用临时表或表变量.更新性能实体框架

我需要更新表中的位字段,并将该字段设置为true,以获取该表中特定的Ids列表.

ID从外部进程传入.

我想在纯SQL中最有效的方法是创建一个临时表并用Ids填充它,然后用这个连接主表并相应地设置位字段.

我可以创建一个SPROC来获取Ids,但是可能涉及需要这个标志的200-300,000行,所以它可能不是最有效的方式.使用IN语句限制了可以传递的数据量和性能.

如何使用实体框架实现上述目标

我想可以创建一个SPROC来创建一个临时表,但从模型的角度来看这不存在.

有没有办法在运行时动态添加实体.[或者这种方法会引起头痛].

我正在做出上面的假设,虽然填充一个300,000行的临时表并且进行连接会比调用SPROC 300,000倍更快:) [Ids是Guids]

还有其他方法我应该考虑.

c# temp-tables sql-server-2008 entity-framework-4

11
推荐指数
1
解决办法
4532
查看次数

11
推荐指数
3
解决办法
2万
查看次数

删除全局临时表

2个单独的问题.

  1. 我正在使用此脚本删除表[求助]

    BEGIN
        EXECUTE IMMEDIATE 'DROP TABLE_NAME';
        DBMS_OUTPUT.PUT_LINE ('Global table TABLE_NAME Dropped');
        EXCEPTION
            WHEN OTHERS THEN
                DBMS_OUTPUT.PUT_LINE ('Global table TABLE_NAME Doesn''t exist.');
    END;
    /
    
    Run Code Online (Sandbox Code Playgroud)

无论如何,如果表"不存在"或者在某些其他会话中使用它(在这种情况下它将被锁定且无法删除),我可以区分.我不确定我是否可以在user_tables中看到该表存在.我不完全了解权限.

我现在已经添加了这个代码

WHEN OTHERS THEN
        i_code  :=  SQLCODE;
        v_errm  :=  SUBSTR(SQLERRM, 1, 64);
  if i_code = -942 THEN
    DBMS_OUTPUT.PUT_LINE ('TABLE_NAME doesn''t exist. Script will continue to create it');
  ELSE
    DBMS_OUTPUT.PUT_LINE ('Error dropping temporary table. The error code is ' || i_code || '- ' || v_errm);
  END IF ;
Run Code Online (Sandbox Code Playgroud)

我明白了.在这样的每个程序结束时

END PROCEDURE_NAME;
.
/ …
Run Code Online (Sandbox Code Playgroud)

oracle ddl plsql temp-tables

11
推荐指数
2
解决办法
10万
查看次数

在MySQL中存储过程结束时删除临时表

DROP TEMPORARY TABLE IF EXISTS data;即使我在顶部检查,我是否需要在存储过程结束时添加?是否存在性能影响?

CREATE DEFINER=`TEST`@`%` PROCEDURE `TEST`() BEGIN

    DROP TEMPORARY TABLE IF EXISTS data;

    CREATE TEMPORARY TABLE data AS 
...


END;
Run Code Online (Sandbox Code Playgroud)

mysql temp-tables

11
推荐指数
1
解决办法
1万
查看次数

临时表更新

查询:

SELECT ID, T.c.value('@Address', 'nvarchar(20)' ) as Address
INTO #TMP
FROM TABLE1
    CROSS APPLY XMLData.nodes('/Document') AS T(c)

UPDATE TABLE1
SET HomeAddress = (SELECT TOP 1 t.Address
                   FROM #TMP t
                   WHERE t.ID = ID)
Run Code Online (Sandbox Code Playgroud)

主要是,我需要将数据OUT从XML字段复制到同一个表中的普通字段.

问题:

  1. 所有记录在Table1上获取HomeAddress的原因是什么?
  2. 真的是Cursor是更新Table1上值的唯一方法吗?

sql t-sql sql-server temp-tables sql-update

11
推荐指数
1
解决办法
4万
查看次数

MySQL中的堆表和临时表之间的区别?

我是MySQL的新手.我的问题可能是错的,如果请纠正或解释.

我只是通过在Google上搜索定义来阅读有关堆表和临时表的内容. 它们之间的确切区别是什么?两者的实时使用情况如何?

据我所知或我读过的内容:

堆表:存储器中存在的表称为HEAP表.在MySql中创建HEAP表时,用户需要将TYPE指定为HEAP.现在,这些表通常称为内存表.这些内存表永远不会有像"BLOB"或"TEXT"这样的数据类型的值.他们使用索引使它们更快.

临时表:在某些情况下,临时表可能非常有用,可以保留临时数据.临时表是当前客户端会话终止时将删除它们.

mysql heap temp-tables

11
推荐指数
2
解决办法
1万
查看次数

为什么MySQL'插入... select ...'比单独选择要慢得多?

我正在尝试将查询结果存储在临时表中以供进一步处理.

create temporary table tmpTest
(
    a FLOAT,
    b FLOAT,
    c FLOAT
)
engine = memory;

insert into tmpTest
(
    select a,b,c from someTable
    where ...
);
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,插入需要一分钟,而单独的子选择只需要几秒钟.为什么将数据写入临时表而不是将其打印到我的SQL管理工具的输出需要这么长时间?

更新 我的设置:MySQL 7.3.2集群,带有8个Debian Linux ndb数据节点1个SQL节点(Windows Server 2012)

我正在运行select on的表是一个ndb表.

我试图找出,如果执行计划在使用'insert into ..'时会有所不同,但它们看起来一样:(抱歉格式化,stackoverflow没有表格)

id  select_type     table       type    possible_keys   key     key_len ref                 rows        Extra
1   PRIMARY         <subquery3> ALL     \N              \N      \N      \N                  \N          \N
1   PRIMARY         foo         ref     PRIMARY         PRIMARY 3       <subquery3>.fooId   9747434     Using where
2   SUBQUERY        someTable   range   PRIMARY         PRIMARY 3       \N                  136933000 …

mysql performance temp-tables insert-into mysql-cluster

11
推荐指数
2
解决办法
1万
查看次数

在存储过程中使用带有exec @sql的临时表

我有一个存储过程,其中一部分如下所示:@DRange是传入的varchar值

declare @sql varchar(max)
set @sql = 'select * into #tmpA from TableA where create_date >= getDate - ' + @DRange + '' and is_enabled = 1'

exec (@sql)

select * from #tmpA
Run Code Online (Sandbox Code Playgroud)

问题是当我执行存储过程时,会出现一条错误消息:找不到对象"#tmpA",因为它不存在或者您没有权限.

是不是可以使用临时表并执行它或我做错了什么?

sql-server stored-procedures temp-tables

11
推荐指数
1
解决办法
2万
查看次数