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

#1 Isaías
17/06/2004 - 16:07 | Informe spam
Esta preguntando por el objeto en la base

tempdb.dbo

¿Esta tratando de crear la tabla en esta base?

Digo, tal vez en TEMPDB, no exista y usted este utilizando
otra base y ahi si existe, ademas, como observacion, esta
creando una tabla temporal GLOBAL, al hacerlo con 2 ##,
coloque solo uno si es por sesion.

Saludos
Respuesta Responder a este mensaje
#2 Eladio Rincón
17/06/2004 - 17:26 | Informe spam
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,

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:
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
#3 luis suescun
18/06/2004 - 02:18 | Informe spam
Tienes toda la razon...

Estoy parado en otra base de datos.

Muchas Gracias.


"Isaías" wrote in message
news:1dc6801c45474$648eb4b0$
Esta preguntando por el objeto en la base

tempdb.dbo

¿Esta tratando de crear la tabla en esta base?

Digo, tal vez en TEMPDB, no exista y usted este utilizando
otra base y ahi si existe, ademas, como observacion, esta
creando una tabla temporal GLOBAL, al hacerlo con 2 ##,
coloque solo uno si es por sesion.

Saludos
Respuesta Responder a este mensaje
#4 luis suescun
18/06/2004 - 02:41 | Informe spam
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.

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

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

Te agradezco muchisimo.



"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,

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:
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
#5 luis suescun
18/06/2004 - 04:02 | Informe spam
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,

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:
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida