标签: temp-tables

我可以在存储过程中动态创建的临时表 (#temp) 上创建索引吗?

我正在我的存储过程中创建临时表(#temp_table)。这是一个包含大量数据的巨大表。然后我在存储过程中创建索引,因为它需要更快地查询临时表。但是当我执行存储过程时,没有使用索引。执行存储过程时未创建索引。

伪代码

CREATE PROC abcdefg
AS
...
SELECT col_a, col_b, col_c....    
  INTO #temp_table
  FROM .....
  WHERE ....
...
CREATE INDEX abc_idx ON #temp_table (col_a)
...
SELECT col_a FROM #temp_table WITH (INDEX (abc_idx))
...
GO
Run Code Online (Sandbox Code Playgroud)

当我尝试执行存储过程时,它无法识别索引。我该如何解决这个问题?

sql sql-server stored-procedures nested temp-tables

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

将多个值插入临时表SQL Server

我正在使用Microsoft SQL Server Management Studio,我正在尝试运行以下查询以将值输入到临时表中以供以后使用:

CREATE TABLE #temptable
(colnumber varchar(15), dispcode varchar(10))

INSERT INTO #temptable (colnumber, dispcode)
VALUES 
('col5', '811'),
('col6', '817'),
('col7', '823'),
('col8', '825');
Run Code Online (Sandbox Code Playgroud)

运行时我收到以下错误:

消息102,级别15,状态1,行50
','附近的语法不正确.

哪个指向"('col5','811'),"

谁能帮我在这里找出问题所在?

sql-server ssms temp-tables

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

从 sp_executsql INSERT INTO 临时表

一般来说,我构建使用 sp_executsql 执行的动态 SQL 语句,如下所示:

EXEC sp_executesql @TempSQLStatement 
Run Code Online (Sandbox Code Playgroud)

我需要将返回结果行集插入某些内容(表变量或临时表),但出现以下错误:

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

执行此操作后:

INSERT INTO #TempTable
EXEC sp_executesql @TempSQLStatement 
Run Code Online (Sandbox Code Playgroud)

根据我所读到的内容,我认为问题是由于我没有指定临时表的列而引起的,但我无法执行此操作,因为返回列数有所不同。

我读过我可以使用全局临时表,但我之前已经这样做过,想知道是否还有其他方法可以做到这一点。

t-sql temp-tables sp-executesql global-temp-tables

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

在Sql Server中,如何将游标中的值放入临时表中?

我正在尝试创建一个具有游标的函数。我想从该游标中获取Quanatity值并将其放在temp表中。但是我还没有成功获取该值并将其放入temp表中。

我在无法完成的地方发表评论...

这是我的代码

alter FUNCTION test(@input VARCHAR(250)) RETURNS Decimal(8, 2) AS BEGIN

DECLARE @rst Decimal(8, 2) SET @rst=0
DECLARE @Temp TABLE (Quantity Decimal(8,2), Price Decimal(8,2))
DECLARE @amount Decimal(8,2)
DECLARE @price Decimal(8,2)

DECLARE CrsOrfLine CURSOR FOR
SELECT AMOUNT FROM LG_001_01_ORFLINE 
 WHERE LINETYPE    = 0 
 AND ORDFICHEREF = (SELECT TOP 1 LOGICALREF FROM LG_001_01_ORFICHE WHERE GUID='EEB44E72-3717-4F5B-8F7E-6A36EB38EA22')
 ORDER BY LINENO_ ASC;

FETCH NEXT FROM CrsOrfLine INTO  @amount
WHILE (@@FETCH_STATUS = 0) 
BEGIN
     INSERT INTO @Temp (Quantity)

     /* HOW AM I SUPPOSED TO ADD …
Run Code Online (Sandbox Code Playgroud)

sql sql-server temp-tables cursor

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

带有###(三重)或更多哈希值的临时表

我们知道,在 SQL Server 中,创建一个表的#意思是“本地临时表”,##意思是“全局临时表”。

但是当我创建一个如下表时:

create table ###MyTable(IntColumn int, ValueColumn varchar(100))
Run Code Online (Sandbox Code Playgroud)

该表是本地临时表还是全局临时表?我该如何测试?当我尝试select通过:

Select * from #MyTable -- SQL said it doesn't exists
Select * from ##MyTable -- SQL said it doesn't exists
Select * from ###MyTable -- I get the output
Run Code Online (Sandbox Code Playgroud)

如果第三种情况属实,这是否意味着这是名称为 的通用表###MyTable?我不会像其他所有物理表一样在我的 SSMS 表浏览器中看到这张表吗?

如果我开始在表名前添加多个 #(哈希)会发生什么?

sql-server temp-tables global-temp-tables

4
推荐指数
2
解决办法
2892
查看次数

SQLAlchemy / SQLSoup 在 MySQL 中看不到临时表

我继承了 SQLQlchemy / SQLSoup 应用程序,需要将其扩展 20 倍。

一个查询运行得非常慢,所以我重构了它。由于MySQL在嵌套子查询/派生表上的性能较差,我将其分成两个临时表并将它们连接起来。

现在我尝试将 SQL 添加到代码中,但是当我尝试访问临时表时,收到一条错误消息,指出该表不存在。

db.execute("""DROP TABLE IF  EXISTS next_requests""") ;
db.execute("""
        CREATE TEMPORARY TABLE next_requests
                (INDEX request_id_index (cirId)) 
        SELECT DISTINCT 
            cr.uuid             AS cirId,
            ....")

db.execute("SELECT * FROM next_requests")
Run Code Online (Sandbox Code Playgroud)

现在我收到错误:

ProgrammingError: (ProgrammingError) (1146, "Table 'SAST.next_requests' (doesn't exist") 
Run Code Online (Sandbox Code Playgroud)

我认为这是因为会话正在关闭并在查询之间重新操作,或者类似的原因。

数据库连接如下。

ENGINE = create_engine(settings.dbString, pool_recycle=1800, pool_size=5)
SESSION = scoped_session(sessionmaker(autoflush=True,\
    expire_on_commit=False, autocommit=True))
SQLSOUP_DB = sqlsoup.SQLSoup(ENGINE, session=SESSION)
Run Code Online (Sandbox Code Playgroud)

(SQLSOUP_DB 是 db.execute 中使用的数据库)。

我需要做什么才能保持会话打开,以便我仍然可以使用临时表。或者可能是其他原因导致了这个问题?

python mysql sqlalchemy temp-tables sqlsoup

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

将临时表传递给 EXEC sp_executesql

如何将临时表(@table)传递给 EXEC sp_executesql @query

    set @query = 'SELECT GsName, ' + @cols + ' from 
        (
            select GSName, [THour], NumOfTransactions
            from @table
       ) x
        pivot 
        (
             max([NumOfTransactions])
            for [THour] in (' + @cols + ')
        ) p '
Run Code Online (Sandbox Code Playgroud)

sql exec temp-tables sp-executesql ssms-2014

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

SQL - 创建一个连接的临时表

我希望将两个表连接到一个临时表中,然后在选择查询中使用临时表。这是我要创建的临时表的选择语句:

select program, event
from OMEGA.HP
inner join POM.GT
on program = substring(name,7,4)
where LENGTH(name)= 25
Run Code Online (Sandbox Code Playgroud)

为上述创建临时表的最简单方法是什么?

sql inner-join temp-tables

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

尝试在单个查询中创建多个临时表

我想在单个 BigQuery 查询中创建 3-4 个单独的临时表(所有表都基于不同的数据源),然后在查询中以各种方式加入它们。

我试图通过使用多个 WITH 语句来做到这一点,但如果您不嵌套它们,则似乎只能在查询中使用一个 WITH 语句。每次我尝试时,都会收到一条错误消息,指出需要“SELECT”语句。

我错过了什么吗?如果可能的话,我更愿意在一个查询中完成这一切。

sql temp-tables google-bigquery

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

为什么 CTE 与临时表相比如此缓慢?

我有一个简单的存储 过程,其中有多个WITH 子句

一些代码是这样的:

WITH cteRowNums AS
(
    SELECT 
        ROW_NUMBER() OVER(ORDER BY fcmp.EmpUserID, fcmp.WorkCellID, fcmp.ActivityTS) AS RowNumber,
        fcmp.ActivityTS, 
        fcmp.ArtifactTypeID, 
        fcmp.ServerDateID, 
        fcmp.ServerHourID, 
        fcmp.EmpUserID, 
        fcmp.WorkCellID
        FROM dbo.FactCassetteMarkingProcessing fcmp
        WHERE ServerDateID >= '2007-01-01'
),
-- Make an attempt at identifying what each user did in their "session" by self-joining
cteJoinCurAndNext AS
(
SELECT
      [Current Row].ArtifactTypeID, 
      [Current Row].ServerDateID, 
      [Current Row].ServerHourID, 
      [Current Row].EmpUserID, 
      [Current Row].WorkCellID
FROM cteRowNums [Current Row] 
    LEFT OUTER JOIN cteRowNums [Next Row] ON [Next Row].RowNumber = [Current Row].RowNumber …
Run Code Online (Sandbox Code Playgroud)

sql sql-server temp-tables

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