CREATE TABLE #tmp , Drop Table #tmp

16/07/2007 - 14:10 por Pedro | Informe spam
No entiendo que hace el SQL 2005

en mis procedures me creo una tabla:

CREATE TABLE #tmp ..


cuando la elimino de la forma:


If not (object_id('tempdb.dbo.#tmp') is null)
Drop Table #tmp
No me da errores cuando vuelvo a crear la misma tabla "#"

pero si me voy a ver las tablas temporales veo que esta alli y que se remite
muchas veces tantas como he ejecutado el procedure

quien me puede decir alguna cosa

Preguntas similare

Leer las respuestas

#6 Gustavo Larriera (MVP)
16/07/2007 - 20:12 | Informe spam
No reproduzco el problema en un SQL Server 2005 Enterprise con service pack 1.

En varias ventanas de query ejecuto un sproc que crea una tabla temporal y
simula una espera de 30 segundos antes de finalizar. Durante el lapso en que
los sprocs están en ejecución, observo en el Object Explorer (nodo: Databases
/ System databases / Tempdb / tables / temporary tables) las N tablas
temporales. Al terminar cada sproc, un Refresh en el nodo va limpiando las
tablas, que fueron eliminadas automáticamente al terminar cada sproc.

El sproc usado es:

CREATE PROC usp_creartablatem
AS
CREATE TABLE #tablatemp (col1 AS INT);
GO

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Pedro" wrote:

Mi tabla es de tipo # y no ##

Las estoy viendo desde el esplorador de objetos, aunque refesco, mesdelogo y
veo que aun estan alli... no me da errores

Pero no se por que no desaparecen?


"Es un procedure que lo estoy ejecutando yo mismo n veces"
alguna idea?


"Alejandro Mesa" wrote:

> Hola Pedro,
>
> - Como sabes que esta alli?
>
> Si tu sp es ejecutado por multiples usuarios, cada session tendra una tabla
> temporal diferente.
>
>
> AMB
>
> "Pedro" wrote:
>
> > No entiendo que hace el SQL 2005
> >
> > en mis procedures me creo una tabla:
> >
> > CREATE TABLE #tmp ..
> >
> >
> > cuando la elimino de la forma:
> >
> >
> > If not (object_id('tempdb.dbo.#tmp') is null)
> > Drop Table #tmp
> > No me da errores cuando vuelvo a crear la misma tabla "#"
> >
> > pero si me voy a ver las tablas temporales veo que esta alli y que se remite
> > muchas veces tantas como he ejecutado el procedure
> >
> > quien me puede decir alguna cosa
> >
> >
Respuesta Responder a este mensaje
#7 Alejandro Mesa
16/07/2007 - 20:48 | Informe spam
Hola Gustavo,

Yo si lo puedo reproducir. Creas el sp, ejecutalo un par de veces, refrezca
la ventana "object explorer detail" y fijate que cuando el sp esta todavia
ejecutandose, el nombre de la tabla aparece como "tablatemp_____...", pero en
cuanto termina, aparece como si este fuese el nombre de una variable tipo
tabla, al go como #1ED998B2.

Si elimino el sp, entonces la tabla desaparece por completo. Esto lo lei en
el grupo privado, en un post hecho por "Andrew Kelly". Un miembro del team de
SQL Server nos dio este tip (caching temp tables cuando no se cambia su
estructura, incluyendo indices, despues de ser creada).


AMB

SQL Server 2005 DE SP2
Windows XP Pro

"Gustavo Larriera (MVP)" wrote:

No reproduzco el problema en un SQL Server 2005 Enterprise con service pack 1.

En varias ventanas de query ejecuto un sproc que crea una tabla temporal y
simula una espera de 30 segundos antes de finalizar. Durante el lapso en que
los sprocs están en ejecución, observo en el Object Explorer (nodo: Databases
/ System databases / Tempdb / tables / temporary tables) las N tablas
temporales. Al terminar cada sproc, un Refresh en el nodo va limpiando las
tablas, que fueron eliminadas automáticamente al terminar cada sproc.

El sproc usado es:

CREATE PROC usp_creartablatem
AS
CREATE TABLE #tablatemp (col1 AS INT);
GO

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Pedro" wrote:

> Mi tabla es de tipo # y no ##
>
> Las estoy viendo desde el esplorador de objetos, aunque refesco, mesdelogo y
> veo que aun estan alli... no me da errores
>
> Pero no se por que no desaparecen?
>
>
> "Es un procedure que lo estoy ejecutando yo mismo n veces"
> alguna idea?
>
>
> "Alejandro Mesa" wrote:
>
> > Hola Pedro,
> >
> > - Como sabes que esta alli?
> >
> > Si tu sp es ejecutado por multiples usuarios, cada session tendra una tabla
> > temporal diferente.
> >
> >
> > AMB
> >
> > "Pedro" wrote:
> >
> > > No entiendo que hace el SQL 2005
> > >
> > > en mis procedures me creo una tabla:
> > >
> > > CREATE TABLE #tmp ..
> > >
> > >
> > > cuando la elimino de la forma:
> > >
> > >
> > > If not (object_id('tempdb.dbo.#tmp') is null)
> > > Drop Table #tmp
> > > No me da errores cuando vuelvo a crear la misma tabla "#"
> > >
> > > pero si me voy a ver las tablas temporales veo que esta alli y que se remite
> > > muchas veces tantas como he ejecutado el procedure
> > >
> > > quien me puede decir alguna cosa
> > >
> > >
Respuesta Responder a este mensaje
#8 Gustavo Larriera (MVP)
16/07/2007 - 22:22 | Informe spam
Hola Alejandro,

tal como dices observo una tabla con nombre similar a #1ED998B2 pero no
puedo seleccionarla con el mouse (recibo un mensaje de error que no he
memorizado :-))

Pero de todas formas, la tabla temporal ha desaparecido (#1ED998B2 no es la
tabla temporal) y no es detectada usando OBJECT_ID

Me suena a problema en la interfaz gráfica que muestra objetos "fantasmas".


Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Alejandro Mesa" wrote:

Hola Gustavo,

Yo si lo puedo reproducir. Creas el sp, ejecutalo un par de veces, refrezca
la ventana "object explorer detail" y fijate que cuando el sp esta todavia
ejecutandose, el nombre de la tabla aparece como "tablatemp_____...", pero en
cuanto termina, aparece como si este fuese el nombre de una variable tipo
tabla, al go como #1ED998B2.

Si elimino el sp, entonces la tabla desaparece por completo. Esto lo lei en
el grupo privado, en un post hecho por "Andrew Kelly". Un miembro del team de
SQL Server nos dio este tip (caching temp tables cuando no se cambia su
estructura, incluyendo indices, despues de ser creada).


AMB

SQL Server 2005 DE SP2
Windows XP Pro

"Gustavo Larriera (MVP)" wrote:

> No reproduzco el problema en un SQL Server 2005 Enterprise con service pack 1.
>
> En varias ventanas de query ejecuto un sproc que crea una tabla temporal y
> simula una espera de 30 segundos antes de finalizar. Durante el lapso en que
> los sprocs están en ejecución, observo en el Object Explorer (nodo: Databases
> / System databases / Tempdb / tables / temporary tables) las N tablas
> temporales. Al terminar cada sproc, un Refresh en el nodo va limpiando las
> tablas, que fueron eliminadas automáticamente al terminar cada sproc.
>
> El sproc usado es:
>
> CREATE PROC usp_creartablatem
> AS
> CREATE TABLE #tablatemp (col1 AS INT);
> GO
>
> Gustavo Larriera, Microsoft MVP
> https://mvp.support.microsoft.com/p...o.Larriera
> Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
>
>
>
> "Pedro" wrote:
>
> > Mi tabla es de tipo # y no ##
> >
> > Las estoy viendo desde el esplorador de objetos, aunque refesco, mesdelogo y
> > veo que aun estan alli... no me da errores
> >
> > Pero no se por que no desaparecen?
> >
> >
> > "Es un procedure que lo estoy ejecutando yo mismo n veces"
> > alguna idea?
> >
> >
> > "Alejandro Mesa" wrote:
> >
> > > Hola Pedro,
> > >
> > > - Como sabes que esta alli?
> > >
> > > Si tu sp es ejecutado por multiples usuarios, cada session tendra una tabla
> > > temporal diferente.
> > >
> > >
> > > AMB
> > >
> > > "Pedro" wrote:
> > >
> > > > No entiendo que hace el SQL 2005
> > > >
> > > > en mis procedures me creo una tabla:
> > > >
> > > > CREATE TABLE #tmp ..
> > > >
> > > >
> > > > cuando la elimino de la forma:
> > > >
> > > >
> > > > If not (object_id('tempdb.dbo.#tmp') is null)
> > > > Drop Table #tmp
> > > > No me da errores cuando vuelvo a crear la misma tabla "#"
> > > >
> > > > pero si me voy a ver las tablas temporales veo que esta alli y que se remite
> > > > muchas veces tantas como he ejecutado el procedure
> > > >
> > > > quien me puede decir alguna cosa
> > > >
> > > >
Respuesta Responder a este mensaje
#9 Alejandro Mesa
16/07/2007 - 22:48 | Informe spam
Hola gustavo,

Ese parece ser el identificador que usa SS para esa tabla en el cache, osea
que la tabla temporal no se ha eliminado del todo. Cuando tengas un chance
busca el post que te comente de Andy, esta muy interesante lo que dice el la
persona que trabaja para Microsoft.

Subject: Tempdb cleanup
From: Andrew J. Kelly
Sent: 6/22/2007 10:37 AM

Saludos,
Alejandro Mesa

"Gustavo Larriera (MVP)" wrote:

Hola Alejandro,

tal como dices observo una tabla con nombre similar a #1ED998B2 pero no
puedo seleccionarla con el mouse (recibo un mensaje de error que no he
memorizado :-))

Pero de todas formas, la tabla temporal ha desaparecido (#1ED998B2 no es la
tabla temporal) y no es detectada usando OBJECT_ID

Me suena a problema en la interfaz gráfica que muestra objetos "fantasmas".


Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Alejandro Mesa" wrote:

> Hola Gustavo,
>
> Yo si lo puedo reproducir. Creas el sp, ejecutalo un par de veces, refrezca
> la ventana "object explorer detail" y fijate que cuando el sp esta todavia
> ejecutandose, el nombre de la tabla aparece como "tablatemp_____...", pero en
> cuanto termina, aparece como si este fuese el nombre de una variable tipo
> tabla, al go como #1ED998B2.
>
> Si elimino el sp, entonces la tabla desaparece por completo. Esto lo lei en
> el grupo privado, en un post hecho por "Andrew Kelly". Un miembro del team de
> SQL Server nos dio este tip (caching temp tables cuando no se cambia su
> estructura, incluyendo indices, despues de ser creada).
>
>
> AMB
>
> SQL Server 2005 DE SP2
> Windows XP Pro
>
> "Gustavo Larriera (MVP)" wrote:
>
> > No reproduzco el problema en un SQL Server 2005 Enterprise con service pack 1.
> >
> > En varias ventanas de query ejecuto un sproc que crea una tabla temporal y
> > simula una espera de 30 segundos antes de finalizar. Durante el lapso en que
> > los sprocs están en ejecución, observo en el Object Explorer (nodo: Databases
> > / System databases / Tempdb / tables / temporary tables) las N tablas
> > temporales. Al terminar cada sproc, un Refresh en el nodo va limpiando las
> > tablas, que fueron eliminadas automáticamente al terminar cada sproc.
> >
> > El sproc usado es:
> >
> > CREATE PROC usp_creartablatem
> > AS
> > CREATE TABLE #tablatemp (col1 AS INT);
> > GO
> >
> > Gustavo Larriera, Microsoft MVP
> > https://mvp.support.microsoft.com/p...o.Larriera
> > Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
> >
> >
> >
> > "Pedro" wrote:
> >
> > > Mi tabla es de tipo # y no ##
> > >
> > > Las estoy viendo desde el esplorador de objetos, aunque refesco, mesdelogo y
> > > veo que aun estan alli... no me da errores
> > >
> > > Pero no se por que no desaparecen?
> > >
> > >
> > > "Es un procedure que lo estoy ejecutando yo mismo n veces"
> > > alguna idea?
> > >
> > >
> > > "Alejandro Mesa" wrote:
> > >
> > > > Hola Pedro,
> > > >
> > > > - Como sabes que esta alli?
> > > >
> > > > Si tu sp es ejecutado por multiples usuarios, cada session tendra una tabla
> > > > temporal diferente.
> > > >
> > > >
> > > > AMB
> > > >
> > > > "Pedro" wrote:
> > > >
> > > > > No entiendo que hace el SQL 2005
> > > > >
> > > > > en mis procedures me creo una tabla:
> > > > >
> > > > > CREATE TABLE #tmp ..
> > > > >
> > > > >
> > > > > cuando la elimino de la forma:
> > > > >
> > > > >
> > > > > If not (object_id('tempdb.dbo.#tmp') is null)
> > > > > Drop Table #tmp
> > > > > No me da errores cuando vuelvo a crear la misma tabla "#"
> > > > >
> > > > > pero si me voy a ver las tablas temporales veo que esta alli y que se remite
> > > > > muchas veces tantas como he ejecutado el procedure
> > > > >
> > > > > quien me puede decir alguna cosa
> > > > >
> > > > >
Respuesta Responder a este mensaje
#10 Alejandro Mesa
16/07/2007 - 22:52 | Informe spam
Hola Gustavo,

Aca te paso el query que ejecuta el "custom report" cuando hacemos "refresh"
en "object explorer detail".


use tempdb

SELECT
'Server[@Name=' + quotename(CAST(serverproperty(N'Servername') AS
sysname),'''') + ']' + '/TemporaryTable[@Name=' + quotename(tbl.name,'''') +
' and @Schema=' + quotename(SCHEMA_NAME(tbl.schema_id),'''') + ']' AS [Urn],
tbl.name AS [Name],
SCHEMA_NAME(tbl.schema_id) AS [Schema],
CAST(
case
when tbl.is_ms_shipped = 1 then 1
when (
select
major_id
from
sys.extended_properties
where
major_id = tbl.object_id and
minor_id = 0 and
class = 1 and
name = N'microsoft_database_tools_support')
is not null then 1
else 0
end
AS bit) AS [IsSystemObject],
tbl.create_date AS [CreateDate]
FROM
sys.tables AS tbl
WHERE
(tbl.name like '#%')
ORDER BY
[Schema] ASC,[Name] ASC


AMB


"Gustavo Larriera (MVP)" wrote:

Hola Alejandro,

tal como dices observo una tabla con nombre similar a #1ED998B2 pero no
puedo seleccionarla con el mouse (recibo un mensaje de error que no he
memorizado :-))

Pero de todas formas, la tabla temporal ha desaparecido (#1ED998B2 no es la
tabla temporal) y no es detectada usando OBJECT_ID

Me suena a problema en la interfaz gráfica que muestra objetos "fantasmas".


Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Alejandro Mesa" wrote:

> Hola Gustavo,
>
> Yo si lo puedo reproducir. Creas el sp, ejecutalo un par de veces, refrezca
> la ventana "object explorer detail" y fijate que cuando el sp esta todavia
> ejecutandose, el nombre de la tabla aparece como "tablatemp_____...", pero en
> cuanto termina, aparece como si este fuese el nombre de una variable tipo
> tabla, al go como #1ED998B2.
>
> Si elimino el sp, entonces la tabla desaparece por completo. Esto lo lei en
> el grupo privado, en un post hecho por "Andrew Kelly". Un miembro del team de
> SQL Server nos dio este tip (caching temp tables cuando no se cambia su
> estructura, incluyendo indices, despues de ser creada).
>
>
> AMB
>
> SQL Server 2005 DE SP2
> Windows XP Pro
>
> "Gustavo Larriera (MVP)" wrote:
>
> > No reproduzco el problema en un SQL Server 2005 Enterprise con service pack 1.
> >
> > En varias ventanas de query ejecuto un sproc que crea una tabla temporal y
> > simula una espera de 30 segundos antes de finalizar. Durante el lapso en que
> > los sprocs están en ejecución, observo en el Object Explorer (nodo: Databases
> > / System databases / Tempdb / tables / temporary tables) las N tablas
> > temporales. Al terminar cada sproc, un Refresh en el nodo va limpiando las
> > tablas, que fueron eliminadas automáticamente al terminar cada sproc.
> >
> > El sproc usado es:
> >
> > CREATE PROC usp_creartablatem
> > AS
> > CREATE TABLE #tablatemp (col1 AS INT);
> > GO
> >
> > Gustavo Larriera, Microsoft MVP
> > https://mvp.support.microsoft.com/p...o.Larriera
> > Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
> >
> >
> >
> > "Pedro" wrote:
> >
> > > Mi tabla es de tipo # y no ##
> > >
> > > Las estoy viendo desde el esplorador de objetos, aunque refesco, mesdelogo y
> > > veo que aun estan alli... no me da errores
> > >
> > > Pero no se por que no desaparecen?
> > >
> > >
> > > "Es un procedure que lo estoy ejecutando yo mismo n veces"
> > > alguna idea?
> > >
> > >
> > > "Alejandro Mesa" wrote:
> > >
> > > > Hola Pedro,
> > > >
> > > > - Como sabes que esta alli?
> > > >
> > > > Si tu sp es ejecutado por multiples usuarios, cada session tendra una tabla
> > > > temporal diferente.
> > > >
> > > >
> > > > AMB
> > > >
> > > > "Pedro" wrote:
> > > >
> > > > > No entiendo que hace el SQL 2005
> > > > >
> > > > > en mis procedures me creo una tabla:
> > > > >
> > > > > CREATE TABLE #tmp ..
> > > > >
> > > > >
> > > > > cuando la elimino de la forma:
> > > > >
> > > > >
> > > > > If not (object_id('tempdb.dbo.#tmp') is null)
> > > > > Drop Table #tmp
> > > > > No me da errores cuando vuelvo a crear la misma tabla "#"
> > > > >
> > > > > pero si me voy a ver las tablas temporales veo que esta alli y que se remite
> > > > > muchas veces tantas como he ejecutado el procedure
> > > > >
> > > > > quien me puede decir alguna cosa
> > > > >
> > > > >
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida