标签: temp-tables

如何从存储过程返回临时表

CREATE PROCEDURE [test].[proc]
@ConfiguredContentId int,
@NumberOfGames int
AS
BEGIN
 SET NOCOUNT ON
 RETURN 
 @WunNumbers TABLE (WinNumb int)

    INSERT INTO @WunNumbers (WinNumb)
 SELECT TOP (@NumberOfGames) WinningNumber
 FROM [Game].[Game] g
 JOIN [Game].[RouletteResult] AS rr ON g.[Id] = rr.[gameId]
 WHERE g.[ConfiguredContentId] = @ConfiguredContentId
 ORDER BY g.[Stoptime] DESC

 SELECT WinNumb, COUNT (WinNumb) AS "Count"
 FROM @WunNumbers wn
 GROUP BY wn.[WinNumb]
END
GO
Run Code Online (Sandbox Code Playgroud)

此存储过程从第一个select语句返回值,但我希望返回第二个select语句中的值.表@WunNumbers是一个临时表.

有任何想法吗???

sql-server stored-procedures temp-tables

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

在MySQL存储过程中创建的临时表的范围

问题撤回!当我拼写正确的一切时,问题就消失了!

我有一个MySQL存储过程,它创建一个临时表.当我从mysql提示符调用该过程时,它似乎运行成功,但如果我然后从临时表中SELECT COUNT(*),我得到一个错误说该表不存在.

存储过程结束时,存储过程内创建的临时表是否不再存在?

mysql> delimiter //
mysql> drop procedure if exists sp_temp_reciepts//
mysql> create procedure sp_temp_receipts ()
begin
  drop temporary table if exists receipts;
  create temporary table receipts
  (  ... snip ...
  );
  insert into receipts
  select ... snip ...
end//
mysql> delimiter ;
mysql> call sp_temp_reciepts();
Query OK, 46903 rows affected, 1 warning (2.15 sec)
mysql> select count(*) from receipts;
ERROR 1146 (42S02): Table 'receipts' doesn't exist
Run Code Online (Sandbox Code Playgroud)

mysql stored-procedures temp-tables

15
推荐指数
1
解决办法
8207
查看次数

如何在Hibernate中使用临时表批量删除记录?

我有个问题.这些方法在哪里?

Dialect.supportsTemporaryTables();
Dialect.generateTemporaryTableName();
Dialect.dropTemporaryTableAfterUse();
Dialect.getDropTemporaryTableString();
Run Code Online (Sandbox Code Playgroud)

我试图浏览git历史记录Dialect.java,但没有运气.我发现有类似的东西 MultiTableBulkIdStrategy被创建但我找不到任何如何使用它的例子.

到目前为止......我有遗留代码(使用hibernate 4.3.11),它使用临时表从多个表中进行批量删除.在那些表格中可能有1000行,但也可能有10万行.所以只是为了确保我不会用一些疯狂的删除来杀死数据库我创建临时表,我把(使用具有某些条件的选择查询)一次1000个ID然后使用此临时表从4个表中删除数据.它在while循环中运行,直到基于某些条件的所有数据都没有被删除.交易在每个周期后提交.

为了使它更复杂,这段代码必须运行在:mysql,mariadb,oracle,postgresql,sqlserver和h2之上.

它是使用本机SQL完成的,具有上述方法.但不是我找不到如何重构它的方法.

我的第一次尝试是使用嵌套选择创建查询,如下所示: delete from TABLE where id in (select id from TABLE where CONDITION limit 1000)但这种方式较慢,因为我必须为每次删除多次运行select查询,而limit在HQL中嵌套选择不支持.

任何想法或指针?

谢谢.

java spring hibernate temp-tables bulk-delete

15
推荐指数
1
解决办法
737
查看次数

是否可以将索引添加到临时表?创建#t和声明@t之间的区别是什么

我需要做一个非常复杂的查询.有一次,这个查询必须连接到一个不幸被编入索引的视图.此视图也是连接大表的复杂视图.

View的输出可以简化为:

PID (int), Kind (int), Date (date), D1,D2..DN
Run Code Online (Sandbox Code Playgroud)

其中PID和日期和种类字段不是唯一的(可能有多个行具有相同的pid,种类,日期组合),但是那些将用于连接的行如此

left join ComplexView mkcs on mkcs.PID=q4.PersonID and mkcs.Date=q4.date and mkcs.Kind=1
left join ComplexView mkcl on mkcl.PID=q4.PersonID and mkcl.Date=q4.date and mkcl.Kind=2
left join ComplexView mkco on mkco.PID=q4.PersonID and mkco.Date=q4.date and mkco.Kind=3
Run Code Online (Sandbox Code Playgroud)

现在,如果我这样做,查询的执行需要很长时间,因为复杂的视图运行了三次我假设,并且在其大量行中只有一些实际使用(例如,40000只有2000只是用过的)

我所做的是声明@temptable,并从ComplexView中插入@temptable select*,其中Date ... - 每次查询一次我只选择我将从我的ComplexView中使用的行,然后我加入这个@temptable.

这显着缩短了执行时间.

但是,我注意到,如果我在我的数据库中创建一个表,并在PID,Kind,Date(非唯一聚簇)上添加聚簇索引并从该表中获取数据,那么从该表执行delete*并插入到此复杂视图中的表需要几秒钟(3或4),然后在我的查询中使用此表(左连接三次)将查询时间从1分钟缩短到30秒!

所以,我的问题是,首先 - 是否可以在声明的@temptables上创建索引.然后 - 我看到人们谈论"创建#temptable"语法.也许这就是我需要的?我在哪里可以读到声明@temptable和create #temptable之间的区别?我应该如何使用我的查询?(此查询适用于MS Reporting Services报告,如果重要的话).

sql t-sql indexing temp-tables

14
推荐指数
2
解决办法
8万
查看次数

如何查看sql server中代码创建的临时表?

##TheTable使用C#代码创建一个全局临时表(即).我希望能够在代码完全运行后在SQL Server管理工作室中看到临时表.

是否有可能做到这一点 ?如果是,那怎么样?

.net c# sql-server temp-tables global-temp-tables

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

在T-SQL中最好地使用临时表上的索引

如果要在存储过程中创建临时表并希望在其上添加一个或两个索引,以提高针对它的任何其他语句的性能,最佳方法是什么?SYBASE说这个:

"创建索引时,表必须包含数据.如果创建临时表并在空表上创建索引,Adaptive Server不会创建列统计信息(如直方图和密度).如果在创建索引后插入数据行,优化器的统计数据不完整."

但是最近一位同事提到,如果我在不同的存储过程中创建临时表和索引到实际使用临时表的那个,那么Adaptive Server优化器能够使用它们.

总的来说,我不是那些增加价值的包装程序的忠实粉丝,所以我实际上并没有去测试这个,但我想我会把问题放在那里,看看是否还有其他任何人方法或建议?

t-sql indexing temp-tables sybase-ase

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

数据库中已经有一个名为"## Temp"的对象

我在SQL Server 2000上有一个存储过程.它包含:
select ... into ##Temp ...
...
drop table ##Temp

当我第二次使用ADO运行存储过程时,它会提示:
数据库中已经有一个名为"## Temp"的对象.
有谁可以告诉我什么是错的?

sql sql-server ado sql-server-2000 temp-tables

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

临时表的默认排序规则

如何检查临时表的排序规则?

我想这样做,因为我想检查如果我有一个具有特定排序规则的数据库会发生什么,不同于SQL Server实例并创建一个临时表.

假设我们有这种情况:

SQL Server 2008 - Latin1_General_CS_AS

测试数据库 - Estonian_CS_AS

然后创建表#Test而不指定排序规则.这将是表的整理?

我想Estonian_CS_AS,但在我正在做的测试中说Latin1_General_CS_AS.这就是为什么我需要找到一个SQL语句来检查这个.

注意:根据我的阅读,我认为临时对象的tempdb整理是由整理定义的.但如果这是真的,它的定义是什么?

sql t-sql sql-server collation temp-tables

13
推荐指数
1
解决办法
8552
查看次数

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万
查看次数