我正在尝试创build一个临时表,只select某个register_type的数据。 我写了这个查询,但它不起作用: $ CREATE TABLE temp1 (Select egauge.dataid, egauge.register_type, egauge.timestamp_localtime, egauge.read_value_avg from rawdata.egauge where register_type like '%gen%' order by dataid, timestamp_localtime ) $ 我正在使用PostgreSQL。 你能告诉我什么是错误的查询?
我正在使用SQL Server 2000,而且许多存储过程广泛使用临时表。 数据库有很多stream量,我担心创build和删除临时表的线程安全性。 比方说,我有一个存储过程,创build一些临时表,它甚至可以将临时表连接到其他临时表等,还可以说两个用户同时执行存储过程。 一个用户是否可以运行sp,并创build一个名为#temp的临时表,而另一个用户运行同一个sp,但由于名为#temp的表已经存在于数据库中而停止运行? 如果同一个用户在同一个连接上执行两次相同的存储过程呢? 是否还有其他奇怪的情况可能导致两个用户查询互相干扰?
我意识到,临时表是会话/连接绑定,不可见或访问会话/连接。 我有一个长期运行的存储过程,在不同阶段创build临时表。 有没有办法看到当前临时表的列表? 我需要什么特权才能做到这一点? 或者, 有没有办法可以看到正在运行的存储过程中正在执行的特定SQL语句? 该过程作为SQL Server中的计划作业运行。 我正在使用SQL Server 2000。 感谢您的指导。
有没有任何SQL子查询语法,可以让你从字面上定义一个临时表? 例如,类似的东西 SELECT MAX(count) AS max, COUNT(*) AS count FROM ( (1 AS id, 7 AS count), (2, 6), (3, 13), (4, 12), (5, 9) ) AS mytable INNER JOIN someothertable ON someothertable.id=mytable.id 这将节省不得不做两到三个查询:创build临时表,将数据放在里面,然后在连接中使用它。 我正在使用MySQL,但会对其他数据库感兴趣,可以做这样的事情。
我需要执行一个查询250万次。 此查询生成一些我需要AVG(column) ,然后使用此AVG从低于平均值的所有值过滤表。 然后我需要将这些过滤的结果插入到表中。 做合理效率的唯一方法似乎是通过为每个query-postmaster python-thread创build一个TEMPORARY TABLE 。 我只是希望这些TEMPORARY TABLE不会永久保存到硬盘上,并且会保留在内存中(RAM),当然,除非它们没有工作内存。 我想知道一个TEMPORARY TABLE是否会引起磁盘写入(这会干扰INSERTS,即整个进程缓慢)
我目前正忙于实施一个filter,我需要为每个“标签”生成一个INNER JOIN克劳斯filter。 问题是,在一大堆SQL之后,我有一个包含所有需要进行select的信息的表,但是我需要为每个生成的INNER JOIN 这基本上是这样的: SELECT * FROM search INNER JOIN search f1 ON f1.baseID = search.baseID AND f1.condition = condition1 INNER JOIN search f2 ON f2.baseID = search.baseID AND f2.condition = condition2 … INNER JOIN search fN ON fN.baseID = search.baseID AND fN.condition = conditionN 这工作,但我更喜欢“search”表是暂时的(它可以是几个数量级,如果它不是一个普通的表),但这给了我一个非常恼人的错误: Can't reopen table 有些研究把我带到这个bug报告中,但是在MySQL上的人似乎并不在意这样一个基本特征(多次使用一个表)不能用于临时表。 我遇到了这个问题的很多可伸缩性问题。 是否有任何可行的解决方法,不需要我pipe理大量的临时但非常真实的表格,或者让我维护一个包含所有数据的巨大表格? 亲切的问候,克里斯 [额外] […]
我的数据库包含三个名为Object_Table , Data_Table和Link_Table 。 链接表只包含两列,即对象logging的标识和数据logging的标识。 我想复制从DATA_TABLE链接到一个给定的对象标识的数据,并将相应的logging插入到Data_Table和Link_Table以获得不同的给定对象标识。 我可以通过select一个表variables和通过为每个迭代做两个插入循环来做到这一点。 这是做这件事的最好方法吗? 编辑 :我想避免一个循环,有两个原因,第一个是我很懒,循环/临时表需要更多的代码,更多的代码意味着更多的地方犯错误,第二个原因是关注性能。 我可以复制一个插入的所有数据,但如何获得链接表链接到新的数据logging,每个logging有一个新的ID?
在创build临时表并声明数据types之后, CREATE TABLE #TempTable( ID int, Date datetime, Name char(20)) 那我如何在数据库中插入物理表上已存的相关数据呢?
我们只是将我们的sql服务器存储过程转换为oracle过程。 Sql Server SP的高度依赖于会话表( INSERT INTO #table1… ),这些表在oracle中被转换为全局临时表。 我们结束了对我们400 SP的500 GTT 现在我们发现在oracle中使用GTT是因为性能和其他问题而被认为是最后的select。 还有什么其他的select? collections? 游标? 我们对GTT的典型使用是这样的: 插入GTT INSERT INTO some_gtt_1 (column_a, column_b, column_c) (SELECT someA, someB, someC FROM TABLE_A WHERE condition_1 = 'YN756' AND type_cd = 'P' AND TO_NUMBER(TO_CHAR(m_date, 'MM')) = '12' AND (lname LIKE (v_LnameUpper || '%') OR lname LIKE (v_searchLnameLower || '%')) AND […]
假设如下: CREATE PROCEDURE [MySPROC] AS BEGIN CREATE TABLE #tempSubset( [MyPrimaryKey] [bigint] NOT NULL, [OtherColumn] [int] NOT NULL) INSERT INTO #tempSubset (MyPrimaryKey, OtherColumn) SELECT SomePrimaryKey, SomeColumn FROM SomeHugeTable WHERE LimitingCondition = true SELECT MyPrimaryKey, OtherColumn FROM #tempSubset WHERE SomeExpensiveCondition = true END 当我生成一个函数导入或映射返回types时,EF不会生成一个复杂types或告诉我: 所选的存储过程或函数不返回任何列 如何克服这一点? 其他答案build议使用表variables (不会这样做是出于性能原因) 伪造返回模式和注释掉真正的存储过程 ,其他build议做类似的意见 …但必须有一种方法来做到这一点,而不必添加不必要的开销或要求我打破存储过程来更新模型?