tabla temporal

17/06/2004 - 04:44 por luis suescun | Informe spam
Buenas Noches...

Gracias por la colaboracion.

tengo esta:

if not exists (select * from dbo.sysobjects where id object_id(N'[tempdb.dbo].[##totalPorEquipo]') and OBJECTPROPERTY(id,
N'IsUserTable') = 1)
Create table ##totalPorEquipo (strequipo varchar(15), curcargofijo
money,consumoCuenta money,consumotiempo int,OlaBI money,OlaWeb money,
movilB int, movilBV money,movilC int,movilCV money,fijos int,fijosV
money,operIntern int, operInternV money)

siempre me devuelve este error: error de conectividad microsoft sql server
driver sqlserver there is already an object named ##totalporequipo in the
database.


Luis



Que me falta.

Gracias

Preguntas similare

Leer las respuestas

#6 Eladio Rincón
18/06/2004 - 11:23 | Informe spam
Hola Luis,

consultar en information_schema sería la solución:

create proc crearFoo
as

if exists ( select * from
tempdb.information_schema.tables
where table_name = '##t1' )
drop table ##t1

create table ##t1 ( id int )

insert into ##t1 select 1

go

exec crearFoo
select id from ##t1




Eladio Rincón
Consultor, SQL Server MVP
Solid Quality Learning Iberoamericana
http://www.SolidQualityLearning.com

http://www.siquelnet.com
"Comparte lo que sabes, aprende lo que no sepas." FGG


luis suescun wrote:
Para Cualquiera de estos dos casos que me expones como solucion, debo
recurrir al cambio de contexto de base de datos. lo que no es
permitido desde un procedimiento almacenado.

Cualquier otra sugerencia, muchas gracias.


"Eladio Rincón" wrote in message
news:eUCqI#
Hola,

el problema es que objectproperty se ejecuta en el contexto de la
base de datos en la que te encuentras por lo que siempre te devolverá
0 si la consulta la ejecutas desde una base de datos que no es tempdb.

prueba esto:

use tempdb
go
create table ##t1 ( id int )
go
select objectproperty ( object_id ( '##t1' ), 'IsUserTable' )
go
drop table ##t1
go

use Northwind
go
create table ##t1 ( id int )
go
select objectproperty ( object_id ( 'tempdb..##t1' ), 'IsUserTable' )
, objectproperty ( object_id ( '##t1' ), 'IsUserTable' )
go
drop table ##t1

la solución "soportada" por MS sería haciendo uso de las vistas
information_schema porque como hemos visto, para este caso no nos
sirve object_property:

if exists ( select * from
tempdb.information_schema.tables
where table_name = '##t1' )
drop table ##t1

create table ##t1 ( id int )


Saludos,


luis suescun wrote:
Buenas Noches...

Gracias por la colaboracion.

tengo esta:

if not exists (select * from dbo.sysobjects where id >> object_id(N'[tempdb.dbo].[##totalPorEquipo]') and OBJECTPROPERTY(id,
N'IsUserTable') = 1)
Create table ##totalPorEquipo (strequipo varchar(15), curcargofijo
money,consumoCuenta money,consumotiempo int,OlaBI money,OlaWeb money,
movilB int, movilBV money,movilC int,movilCV money,fijos int,fijosV
money,operIntern int, operInternV money)

siempre me devuelve este error: error de conectividad microsoft sql
server driver sqlserver there is already an object named
##totalporequipo in the database.


Luis



Que me falta.

Gracias
Respuesta Responder a este mensaje
#7 Eladio Rincón
18/06/2004 - 11:25 | Informe spam
Hola Luis,


luis suescun wrote:
Tienes toda la razon...

lo que noto es que si creas la tabla temporal estando en otro
contexto, esta es creada automaticamente en el contexto de tempdb,
pues si haces una consulta a la tabla desde el contexto desde el que
se creo, te la responde.

En cambio, si quieres preguntar si existe el objeto de tabla temporal
desde el contexto desde el que fue creado no te la encuentra, pero si
te cambias al contexto tempdb, te la encuentra.




Efectivamente, es cómo funciona objectproperty;

<bol>

OBJECTPROPERTY
Devuelve información acerca de los objetos de la base de datos actual.
Sintaxis
OBJECTPROPERTY ( id , property )

</bol>

Hay algo, que esta como corto, pues si haces la consulta desde otro
contexto diferente, el servidor, automaticamente te hace la consulta
en tempdb.




las vistas information_schema; también están soportadas por SQL Server y forman parte del estandar ANSI

pero no actua igual, para encontrar el objeto. y responder si existe
o no.

Te agradezco muchisimo.





Eladio Rincón
Consultor, SQL Server MVP
Solid Quality Learning Iberoamericana
http://www.SolidQualityLearning.com

http://www.siquelnet.com
"Comparte lo que sabes, aprende lo que no sepas." FGG


"Eladio Rincón" wrote in message
news:eUCqI#
Hola,

el problema es que objectproperty se ejecuta en el contexto de la
base de datos en la que te encuentras por lo que siempre te devolverá
0 si la consulta la ejecutas desde una base de datos que no es tempdb.

prueba esto:

use tempdb
go
create table ##t1 ( id int )
go
select objectproperty ( object_id ( '##t1' ), 'IsUserTable' )
go
drop table ##t1
go

use Northwind
go
create table ##t1 ( id int )
go
select objectproperty ( object_id ( 'tempdb..##t1' ), 'IsUserTable' )
, objectproperty ( object_id ( '##t1' ), 'IsUserTable' )
go
drop table ##t1

la solución "soportada" por MS sería haciendo uso de las vistas
information_schema porque como hemos visto, para este caso no nos
sirve object_property:

if exists ( select * from
tempdb.information_schema.tables
where table_name = '##t1' )
drop table ##t1

create table ##t1 ( id int )


Saludos,


luis suescun wrote:
Buenas Noches...

Gracias por la colaboracion.

tengo esta:

if not exists (select * from dbo.sysobjects where id >> object_id(N'[tempdb.dbo].[##totalPorEquipo]') and OBJECTPROPERTY(id,
N'IsUserTable') = 1)
Create table ##totalPorEquipo (strequipo varchar(15), curcargofijo
money,consumoCuenta money,consumotiempo int,OlaBI money,OlaWeb money,
movilB int, movilBV money,movilC int,movilCV money,fijos int,fijosV
money,operIntern int, operInternV money)

siempre me devuelve este error: error de conectividad microsoft sql
server driver sqlserver there is already an object named
##totalporequipo in the database.


Luis



Que me falta.

Gracias
Respuesta Responder a este mensaje
#8 luis suescun
18/06/2004 - 21:53 | Informe spam
Ok..

Muchas Gracias.

"Eladio Rincón" wrote in message
news:
Hola Luis,


luis suescun wrote:
Tienes toda la razon...

lo que noto es que si creas la tabla temporal estando en otro
contexto, esta es creada automaticamente en el contexto de tempdb,
pues si haces una consulta a la tabla desde el contexto desde el que
se creo, te la responde.

En cambio, si quieres preguntar si existe el objeto de tabla temporal
desde el contexto desde el que fue creado no te la encuentra, pero si
te cambias al contexto tempdb, te la encuentra.




Efectivamente, es cómo funciona objectproperty;

<bol>

OBJECTPROPERTY
Devuelve información acerca de los objetos de la base de datos actual.
Sintaxis
OBJECTPROPERTY ( id , property )

</bol>

Hay algo, que esta como corto, pues si haces la consulta desde otro
contexto diferente, el servidor, automaticamente te hace la consulta
en tempdb.




las vistas information_schema; también están soportadas por SQL Server y
forman parte del estandar ANSI

pero no actua igual, para encontrar el objeto. y responder si existe
o no.

Te agradezco muchisimo.





Eladio Rincón
Consultor, SQL Server MVP
Solid Quality Learning Iberoamericana
http://www.SolidQualityLearning.com

http://www.siquelnet.com
"Comparte lo que sabes, aprende lo que no sepas." FGG


"Eladio Rincón" wrote in message
news:eUCqI#
Hola,

el problema es que objectproperty se ejecuta en el contexto de la
base de datos en la que te encuentras por lo que siempre te devolverá
0 si la consulta la ejecutas desde una base de datos que no es tempdb.

prueba esto:

use tempdb
go
create table ##t1 ( id int )
go
select objectproperty ( object_id ( '##t1' ), 'IsUserTable' )
go
drop table ##t1
go

use Northwind
go
create table ##t1 ( id int )
go
select objectproperty ( object_id ( 'tempdb..##t1' ), 'IsUserTable' )
, objectproperty ( object_id ( '##t1' ), 'IsUserTable' )
go
drop table ##t1

la solución "soportada" por MS sería haciendo uso de las vistas
information_schema porque como hemos visto, para este caso no nos
sirve object_property:

if exists ( select * from
tempdb.information_schema.tables
where table_name = '##t1' )
drop table ##t1

create table ##t1 ( id int )


Saludos,


luis suescun wrote:
Buenas Noches...

Gracias por la colaboracion.

tengo esta:

if not exists (select * from dbo.sysobjects where id >> object_id(N'[tempdb.dbo].[##totalPorEquipo]') and OBJECTPROPERTY(id,
N'IsUserTable') = 1)
Create table ##totalPorEquipo (strequipo varchar(15), curcargofijo
money,consumoCuenta money,consumotiempo int,OlaBI money,OlaWeb money,
movilB int, movilBV money,movilC int,movilCV money,fijos int,fijosV
money,operIntern int, operInternV money)

siempre me devuelve este error: error de conectividad microsoft sql
server driver sqlserver there is already an object named
##totalporequipo in the database.


Luis



Que me falta.

Gracias
Respuesta Responder a este mensaje
#9 luis suescun
24/06/2004 - 19:49 | Informe spam
Mil Gracias Eladio...


"Eladio Rincón" wrote in message
news:##
Hola Luis,

consultar en information_schema sería la solución:

create proc crearFoo
as

if exists ( select * from
tempdb.information_schema.tables
where table_name = '##t1' )
drop table ##t1

create table ##t1 ( id int )

insert into ##t1 select 1

go

exec crearFoo
select id from ##t1




Eladio Rincón
Consultor, SQL Server MVP
Solid Quality Learning Iberoamericana
http://www.SolidQualityLearning.com

http://www.siquelnet.com
"Comparte lo que sabes, aprende lo que no sepas." FGG


luis suescun wrote:
Para Cualquiera de estos dos casos que me expones como solucion, debo
recurrir al cambio de contexto de base de datos. lo que no es
permitido desde un procedimiento almacenado.

Cualquier otra sugerencia, muchas gracias.


"Eladio Rincón" wrote in message
news:eUCqI#
Hola,

el problema es que objectproperty se ejecuta en el contexto de la
base de datos en la que te encuentras por lo que siempre te devolverá
0 si la consulta la ejecutas desde una base de datos que no es tempdb.

prueba esto:

use tempdb
go
create table ##t1 ( id int )
go
select objectproperty ( object_id ( '##t1' ), 'IsUserTable' )
go
drop table ##t1
go

use Northwind
go
create table ##t1 ( id int )
go
select objectproperty ( object_id ( 'tempdb..##t1' ), 'IsUserTable' )
, objectproperty ( object_id ( '##t1' ), 'IsUserTable' )
go
drop table ##t1

la solución "soportada" por MS sería haciendo uso de las vistas
information_schema porque como hemos visto, para este caso no nos
sirve object_property:

if exists ( select * from
tempdb.information_schema.tables
where table_name = '##t1' )
drop table ##t1

create table ##t1 ( id int )


Saludos,


luis suescun wrote:
Buenas Noches...

Gracias por la colaboracion.

tengo esta:

if not exists (select * from dbo.sysobjects where id >> object_id(N'[tempdb.dbo].[##totalPorEquipo]') and OBJECTPROPERTY(id,
N'IsUserTable') = 1)
Create table ##totalPorEquipo (strequipo varchar(15), curcargofijo
money,consumoCuenta money,consumotiempo int,OlaBI money,OlaWeb money,
movilB int, movilBV money,movilC int,movilCV money,fijos int,fijosV
money,operIntern int, operInternV money)

siempre me devuelve este error: error de conectividad microsoft sql
server driver sqlserver there is already an object named
##totalporequipo in the database.


Luis



Que me falta.

Gracias
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida