标签: temp-tables

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

EF无法从#temp表中选择存储过程中的返回模式

假设如下:

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
Run Code Online (Sandbox Code Playgroud)

当我生成函数导入或映射返回类型时,EF不会生成复杂类型或告诉我:

选定的存储过程或函数不返回任何列

怎么克服这个?

其他答案建议使用表变量(由于性能原因不会这样做)伪造返回模式并注释掉实际存储过程,其他建议与视图类似 ...但必须有一种方法来做到这一点,而不必添加不必要的开销或要求我打破存储过程来更新模型?

stored-procedures entity-framework temp-tables

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

执行sp_executeSql以选择...到#table但不能选择临时表数据

试图在sp_Executedsql中选择...到临时表#TempTable.不是它成功插入或没有,但有消息写入(359行受影响)意味着成功插入?下面的脚本

DECLARE @Sql NVARCHAR(MAX);
SET @Sql = 'select distinct Coloum1,Coloum2 into #TempTable 
            from SPCTable with(nolock)
            where Convert(varchar(10), Date_Tm, 120) Between @Date_From And @Date_To';

SET @Sql = 'DECLARE @Date_From VARCHAR(10);
            DECLARE @Date_To VARCHAR(10);
            SET @Date_From = '''+CONVERT(VARCHAR(10),DATEADD(d,DATEDIFF(d,0,GETDATE()),0)-1,120)+''';
            SET @Date_To = '''+CONVERT(VARCHAR(10),DATEADD(d,DATEDIFF(d,0,GETDATE()),0)-1,120)+''';
            '+ @Sql;

EXECUTE sp_executesql @Sql;
Run Code Online (Sandbox Code Playgroud)

执行后,它返回我的消息(359行受影响).接下来尝试从#TempTable中选择数据时.

Select * From #TempTable;
Run Code Online (Sandbox Code Playgroud)

它回报我:

Msg 208, Level 16, State 0, Line 2
Invalid object name '#TempTable'.
Run Code Online (Sandbox Code Playgroud)

怀疑它只在'选择'部分工作.插入不起作用.如何解决?

sql t-sql temp-tables sql-server-2008 sp-executesql

33
推荐指数
4
解决办法
6万
查看次数

PostgreSQL相当于MySQL内存表?

PostgreSQL有相同的MySQL 内存表吗?

这些MySQL内存表可以跨会话持久化(即,与会话结束时丢弃的临时表不同).我无法找到任何可以做同样事情的PostgreSQL.

mysql postgresql temp-tables

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

MySQL临时表是共享资源吗?

我有一个使用临时表的MySQL存储过程.假设我的表名是'temp',我用它来存储一些中间数据.它将在程序开始时创建,并将在最后删除.

CREATE PROCEDURE p()
BEGIN

CREATE TEMPORARY TABLE \`temp\`(...);

INSERT INTO \`temp\` VALUES(...);

DROP TEMPORARY TABLE \`temp\`;

END;
Run Code Online (Sandbox Code Playgroud)

问题是这个存储过程可能会被不同的用户同时使用,所以我想知道这是否会导致任何问题(即临时表中插入数据的任何冲突).换句话说临时表是对同一个SP的不同调用内的共享资源吗?

mysql concurrency temp-tables

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

Oracle中的临时表与全局临时表有什么区别?

我听过这两个术语"临时表"和"全局临时表"在类似的上下文中使用了很多.

两者有什么区别?

database oracle temp-tables

29
推荐指数
4
解决办法
6万
查看次数

SQL Server SELECT INTO和使用临时表阻止

所以,最近DBA试图告诉我们我们不能使用的语法

SELECT X, Y, Z
INTO #MyTable
FROM YourTable
Run Code Online (Sandbox Code Playgroud)

在我们的环境中创建临时表,因为该语法会在执行存储过程的持续时间内导致TempDB锁定.现在,我发现了一些详细说明临时表如何工作,执行范围,清理等的东西.但是对于我的生活,由于它们的使用,我没有看到任何关于阻挡的事情.

我们试图找到证据,证明我们不应该经历并为所有临时表执行CREATE TABLE #MyTable ...但是双方都无法找到证据.我正在寻找人们所拥有的任何见解.

附加信息

目前正在使用SQL Server 2005,很快将成为SQL Server 2008(企业版)

sql-server stored-procedures temp-tables sqlperformance

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

在临时表上创建主键 - 何时?

我有一个使用大量数据的存储过程.我将数据插入到临时表中.事件的总体流程是这样的

CREATE #TempTable (
    Col1    NUMERIC(18,0) NOT NULL,    --This will not be an identity column.
    ,Col2   INT NOT NULL,
    ,Col3   BIGINT,

    ,Col4   VARCHAR(25) NOT NULL,
    --Etc...

    --
    --Create primary key here?
)


INSERT INTO #TempTable
SELECT ...
FROM MyTable
WHERE ...

INSERT INTO #TempTable
SELECT ...
FROM MyTable2
WHERE ...

--
-- ...or create primary key here?
Run Code Online (Sandbox Code Playgroud)

我的问题是什么时候是在#TempTable表上创建主键的最佳时机?我推断在插入所有数据后我应该创建主键约束/索引,因为索引需要在创建主键信息时重新组织.但我意识到我强调的假设可能是错误的......

如果它是相关的,我使用的数据类型是真实的.在#TempTable表中,Col1Col4会弥补我的主键.

更新:就我而言,我正在复制源表的主键.我知道构成我的主键的字段将始终是唯一的.如果我在最后添加主键,我不关心失败的alter table.

虽然,除此之外,我的问题仍然存在,假设两者都会成功,这个问题会更快吗?

PS如果这是重复,我很抱歉.它可能是基本的,但我找不到类似的东西.

sql-server indexing temp-tables primary-key

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

在oracle中避免全局临时表的方法

我们刚刚将我们的sql server存储过程转换为oracle程序.Sql Server SP高度依赖于会话表(INSERT INTO #table1...)这些表在oracle中被转换为全局临时表.我们最终为我们的400 SP提供了500 GTT

现在我们发现,由于性能和其他问题,在Oracle中使用GTT是最后的选择.

有什么其他选择吗?收藏?游标?

我们对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 (e_flag = 'Y' OR
      it_flag = 'Y' OR
      fit_flag = 'Y'));
Run Code Online (Sandbox Code Playgroud)

更新GTT

UPDATE some_gtt_1 a
SET column_a = (SELECT b.data_a FROM some_table_b b 
               WHERE a.column_b = b.data_b AND …
Run Code Online (Sandbox Code Playgroud)

oracle plsql temp-tables

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

SQL Server临时表与游标

在SQL Server存储过程中何时使用临时表以及何时使用游标.这是明智的选择吗?

sql stored-procedures temp-tables

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