存储过程中新建临时表的

要写一个存储过程,如果临时表 test 不存在 ,新建临时表,如果存在不新建

alter procedure test
as
    if object_id(‘tempdb..#test‘) is null
        begin
            print ‘不存在‘
            create table #test (
                number int not null primary key,
                message varchar(50) not null
            )
        end
else
    print ‘存在‘

exec test
select * from #test

上面的SQL语句,调用存储过程之后查询临时表会报错

不存在
消息 2714,级别 16,状态 6,过程 test,第 6 行
数据库中已存在名为 ‘##test‘ 的对象。

后来将 #test 改为 ##test  便可以了

猜想可能是在存储过程中创建的 #test 只能在存储过程中写查询可以查询到 ##表示全局临时表,在存储过程外也可以查询到

原文地址:https://www.cnblogs.com/privategardens/p/10772984.html

时间: 2024-10-09 09:58:39

存储过程中新建临时表的的相关文章

sqlserver 存储过程中使用临时表到底会不会导致重编译

曾经在网络上看到过,SqlServer的存储过程中使用临时表,会导致执行计划无法重用, 运行时候会导致重编译的这么一个说法,自己私底下去做测试的时候,根据profile的跟踪结果, 如果不是统计信息变更导致导致的重编译,单单是使用临时表,并不会导致重编译, 但是对于一些特殊的情况,又确实会出现重编译的, 为了弄清楚这个问题,查阅了大量的资料,才把这个问题弄清楚,这里特意记录下来,希望武断地认为存储过程中使用了临时表就会导致重编译的这个观点得到纠正. 首先进行下面的测试,我们知道,导致临时表重编译

在oracle存储过程中创建临时表

在oracle的存储过程中,不能直接使用DDL语句,比如create.alter.drop.truncate等. 那如果我们想在存储过程中建立一张临时表就只能使用动态sql语句了: create or replace procedure pro as str_sql varchar2(100); begin -- 创建临时表 str_sql := 'create global temporary table temp_table ( col1 varchar2(10), col2 number

如何解决存储过程中关联临时表时快时慢的情况

调用一个存储过程,同样的条件,数据库负载也是正常的情况下,时快时慢.原因是数据库无法获取临时表的统计信息,导致执行计划会走错.之前写过一个帖子,被临时表坑了,http://blog.csdn.net/stevendbaguo/article/details/39964807,就是用hint/*+ dynamic_sampling(T 10) */来做动态采集,这种解决方案实践证明还是没有很好的解决问题,出现时快时慢的几率只是小了一点. 最优的解决方案是什么呢? 一般我们会选择事务型的临时表,如果

mysql实例:在存储过程中创建临时表

在mysql的存储过程创建临时表的例子,是学习mysql 临时表操作的不错的例子. 操作步骤: mysql> mysql> mysql> CREATE TABLE Employee( //创建普通表 -> id int, -> first_name VARCHAR(15), -> last_name VARCHAR(15), -> start_date DATE, -> end_date DATE, -> salary FLOAT(8,2), ->

存储过程中使用临时表

CREATE PROCEDURE [dbo].[usp_UserFriendsOrder] @s varchar(MAX) as --如果临时表存在则先删除 if exists(select * from dbo.sysobjects where object_id('tempdb.dbo.#temp') is not null) delete from #temp else create table #temp(F_ID int,F_UserID char(36),F_FatherID int

mysql存储过程中使用临时表和游标

1.临时表 1 DROP PROCEDURE 2 IF EXISTS `P_GetMonitorPeople`; 3 CREATE PROCEDURE P_GetMonitorPeople (IN fgid INT, IN mins INT,in lens INT) 4 BEGIN 5 IF fgid>0&&mins>0&&lens>0 THEN 6 BEGIN 7 -- 建表tb_temp1 8 DROP TABLE IF EXISTS tb_temp1

SQLServer 中的存储过程中判断临时表是否存在,存在则删除临时表

IF OBJECT_ID('TEMPDB..#BCROSSREFERENCE ') IS NOT NULL DROP TABLE #BCROSSREFERENCE IF OBJECT_ID('TEMPDB..#SCVTMP_BCUSTOMER') IS NOT NULL DROP TABLE #SCVTMP_BCUSTOMER IF OBJECT_ID('TEMPDB..#PDS_CREATE_SCV_TEMP') IS NOT NULL DROP TABLE #PDS_CREATE_SCV_T

存储过程中引用的常规表,临时表以及表变量是否会导致存储过程的重编译

在存储过程中,经常要引用一些表来存储一些中间数据,用完即删.对于这个中间表,用常规表,临时表或者表变量有什么区别呢? 下面我们看一下这三种中间表是否会造成执行计划的重编译. 首先打开sql server profile,监控存储过程. 1.建第一个存储过程,在存储过程中创建常规表TT1 CREATE PROCEDURE TEST1_PRO AS BEGIN CREATE TABLE TT1( ID INT IDENTITY, NAME VARCHAR(10) ) INSERT INTO TT1

SQL Server数据库的存储过程中定义的临时表,真的有必要显式删除(drop table #tableName)吗?

本文出处:http://www.cnblogs.com/wy123/p/6704619.html 问题背景 在写SQL Server存储过程中,如果存储过程中定义了临时表,有些人习惯在存储过程结束的时候一个一个显式地删除过程中定义的临时表(drop table #tName),有些人又没有这个习惯,对于不明真相的群众或者喜欢思考的人会问,存储过程中定义的临时表,最后要不要主动删除,为什么?或者说是不是存储过程结束的时候删除临时表更加规范?不止一个人问过这个问题了,说实在话,本人之前确实不清楚,只