Problemas para eliminar tabla

04/11/2004 - 22:30 por Claudio Valdes | Informe spam
Hola a todos:

Estoy ejecutando un Sp que se encuentra en la base de datos Master, el cual
se ejecuta desde cualquier base de datos

En el Sp existe una linea que verifica si existe una tabla y la borra, pero
no la ejecuta y me arroja el siguiente error

Servidor: mensaje 2714, nivel 16, estado 6, línea 1
Ya hay un objeto con el nombre 'TMP_Emi' en la base de datos.

El código dentro del Sp es el siguiente

IF exists (select * from dbo.sysobjects where id = object_id(N'[' +
ltrim(rtrim(@BaseDatos)) + '].[dbo].[Tmp_Emi]') and OBJECTPROPERTY(id,
N'IsUserTable') = 1)
Begin
Set @sql='drop table [' + ltrim(rtrim(@BaseDatos)) + '].[dbo].[Tmp_Emi]'
exec (@sql)
End

Set @sql= 'Select top 100 a.*
Into ' + ltrim(rtrim(@BaseDatos)) + '.dbo.Tmp_Emi
From TablaBase'

Exec (@sql)

Estoy ejecutando el Sp bajo la cuenta del sa y no se porque no me deja
borrarlo, ya verifique ejecutandolo sin Sql-Dinamico
y es el mismo problema. Al parecer tendría que ver con problemas de permisos

Desde ya muchas gracias por su ayuda y comentarios

Atte,
Claudio Valdés

Preguntas similare

Leer las respuestas

#6 Claudio Valdés
05/11/2004 - 01:16 | Informe spam
Hola a todos:

Encontre la solución y la envie al foro pero no se porque no aparece, en
todo caso es justamente lo que indica Guillermo Roldán.
pero además tuve que cambiar la instrucción

OBJECTPROPERTY(id, N'IsUserTable') = 1 por el campo de la tabla sysobjects

porque no logre parametrizarla para que me indicara los valores de otra base
de datos que no fuese la Master, en definitiva la consulta quedo como sigue

Set @sql='IF exists (select 1 from ' + ltrim(rtrim(@BaseDatos)) +
'.dbo.sysobjects where id = object_id(N''[' + ltrim(rtrim(@BaseDatos)) +
'].[dbo].[Tmp_Emi]'') and xType=''U'')
drop table [' + ltrim(rtrim(@BaseDatos)) + '].[dbo].[Tmp_Emi]'

exec (@sql)

En realidad no se que inconveniente tenga utilizar el xType en vez de
OBJECTPROPERTY(id, N'IsUserTable') = 1

- Respondiendo a Gustavo Larriera, en realidad lo realizo por un tema de
costos, debido a que realizar un Delete sobre una tabla muy grande es muy
lento

- Preguntando a MAXI, me podrías indicar cuales son tus malas experiencias
trabajando con SQL-Dinamico, por que para mi es muy comodo debido a que
puedes estandarizar tareas que trabajan sobre muchas bases de datos
realizando tareas comunes o tambien me he topado con casos en los que se
complica mucho un problema tratando de abordarlo de otra forma.

Muchas gracias a todos por su ayuda y comentarios

Atte,
Claudio Valdés

"MAXI" escribió en el mensaje
news:#
Claudio, ademas de lo que indican los compas!! no te recomiendo el uso de
SQL-Dinamico!! sacalo por favor!!




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messenger:

"Claudio Valdes" escribió en el mensaje
news:%
> Hola a todos:
>
> Estoy ejecutando un Sp que se encuentra en la base de datos Master, el
> cual
> se ejecuta desde cualquier base de datos
>
> En el Sp existe una linea que verifica si existe una tabla y la borra,
> pero
> no la ejecuta y me arroja el siguiente error
>
> Servidor: mensaje 2714, nivel 16, estado 6, línea 1
> Ya hay un objeto con el nombre 'TMP_Emi' en la base de datos.
>
> El código dentro del Sp es el siguiente
>
> IF exists (select * from dbo.sysobjects where id = object_id(N'[' +
> ltrim(rtrim(@BaseDatos)) + '].[dbo].[Tmp_Emi]') and OBJECTPROPERTY(id,
> N'IsUserTable') = 1)
> Begin
> Set @sql='drop table [' + ltrim(rtrim(@BaseDatos)) +


'].[dbo].[Tmp_Emi]'
> exec (@sql)
> End
>
> Set @sql= 'Select top 100 a.*
> Into ' + ltrim(rtrim(@BaseDatos)) + '.dbo.Tmp_Emi
> From TablaBase'
>
> Exec (@sql)
>
> Estoy ejecutando el Sp bajo la cuenta del sa y no se porque no me deja
> borrarlo, ya verifique ejecutandolo sin Sql-Dinamico
> y es el mismo problema. Al parecer tendría que ver con problemas de
> permisos
>
> Desde ya muchas gracias por su ayuda y comentarios
>
> Atte,
> Claudio Valdés
>
>


Respuesta Responder a este mensaje
#7 MAXI
05/11/2004 - 01:55 | Informe spam
Claudio, mira ya te cuento los problemas

1) Si un SP tiene Sql_dinamico vas a tener que darle acceso a tus usuarios
no solo a que pueda ejecutar el SP sino que tenga accesos sobre los objetos
del Sql-dinamico.

Por ej: Si el sql-dinamico llama a la tabla Customers, el usuario que
ejecute el SP debera tener permisos sobre customers!! , con lo cual la
seguridad ya esta en el horno

2) que pasaria si un usuario con malas intenciones quiere injectar codigo? o
sea que si la var no es sanita!! ni te cuento lo que puede pasar!! por ej
hasta podrian hacer colgar el servidor (claro esta, si no tienes control
sobre algunas cosas) con unas simples instrucciones (ni sueñes que las
exponga en publico :-)

3) Performance, es muy malo, ya que debe recompilar por cada vez que se
ejecuta!!


Suerte




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messenger:

"Claudio Valdés" escribió en el mensaje
news:
Hola a todos:

Encontre la solución y la envie al foro pero no se porque no aparece, en
todo caso es justamente lo que indica Guillermo Roldán.
pero además tuve que cambiar la instrucción

OBJECTPROPERTY(id, N'IsUserTable') = 1 por el campo de la tabla sysobjects

porque no logre parametrizarla para que me indicara los valores de otra
base
de datos que no fuese la Master, en definitiva la consulta quedo como
sigue

Set @sql='IF exists (select 1 from ' + ltrim(rtrim(@BaseDatos)) +
'.dbo.sysobjects where id = object_id(N''[' + ltrim(rtrim(@BaseDatos)) +
'].[dbo].[Tmp_Emi]'') and xType=''U'')
drop table [' + ltrim(rtrim(@BaseDatos)) + '].[dbo].[Tmp_Emi]'

exec (@sql)

En realidad no se que inconveniente tenga utilizar el xType en vez de
OBJECTPROPERTY(id, N'IsUserTable') = 1

- Respondiendo a Gustavo Larriera, en realidad lo realizo por un tema de
costos, debido a que realizar un Delete sobre una tabla muy grande es muy
lento

- Preguntando a MAXI, me podrías indicar cuales son tus malas experiencias
trabajando con SQL-Dinamico, por que para mi es muy comodo debido a que
puedes estandarizar tareas que trabajan sobre muchas bases de datos
realizando tareas comunes o tambien me he topado con casos en los que se
complica mucho un problema tratando de abordarlo de otra forma.

Muchas gracias a todos por su ayuda y comentarios

Atte,
Claudio Valdés

"MAXI" escribió en el mensaje
news:#
Claudio, ademas de lo que indican los compas!! no te recomiendo el uso de
SQL-Dinamico!! sacalo por favor!!




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messenger:

"Claudio Valdes" escribió en el mensaje
news:%
> Hola a todos:
>
> Estoy ejecutando un Sp que se encuentra en la base de datos Master, el
> cual
> se ejecuta desde cualquier base de datos
>
> En el Sp existe una linea que verifica si existe una tabla y la borra,
> pero
> no la ejecuta y me arroja el siguiente error
>
> Servidor: mensaje 2714, nivel 16, estado 6, línea 1
> Ya hay un objeto con el nombre 'TMP_Emi' en la base de datos.
>
> El código dentro del Sp es el siguiente
>
> IF exists (select * from dbo.sysobjects where id = object_id(N'[' +
> ltrim(rtrim(@BaseDatos)) + '].[dbo].[Tmp_Emi]') and OBJECTPROPERTY(id,
> N'IsUserTable') = 1)
> Begin
> Set @sql='drop table [' + ltrim(rtrim(@BaseDatos)) +


'].[dbo].[Tmp_Emi]'
> exec (@sql)
> End
>
> Set @sql= 'Select top 100 a.*
> Into ' + ltrim(rtrim(@BaseDatos)) + '.dbo.Tmp_Emi
> From TablaBase'
>
> Exec (@sql)
>
> Estoy ejecutando el Sp bajo la cuenta del sa y no se porque no me deja
> borrarlo, ya verifique ejecutandolo sin Sql-Dinamico
> y es el mismo problema. Al parecer tendría que ver con problemas de
> permisos
>
> Desde ya muchas gracias por su ayuda y comentarios
>
> Atte,
> Claudio Valdés
>
>






Respuesta Responder a este mensaje
#8 Maxi
05/11/2004 - 13:56 | Informe spam
Hola, te paso este link para que leas un poco (habla sobre el tema de
Sql-Dinamico) y lo explica mucho mejor que yo ;-)

http://www.hayes.ch/sql/sql_dinamico.html



Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Claudio Valdés" escribió en el mensaje
news:
Hola a todos:

Encontre la solución y la envie al foro pero no se porque no aparece, en
todo caso es justamente lo que indica Guillermo Roldán.
pero además tuve que cambiar la instrucción

OBJECTPROPERTY(id, N'IsUserTable') = 1 por el campo de la tabla sysobjects

porque no logre parametrizarla para que me indicara los valores de otra
base
de datos que no fuese la Master, en definitiva la consulta quedo como
sigue

Set @sql='IF exists (select 1 from ' + ltrim(rtrim(@BaseDatos)) +
'.dbo.sysobjects where id = object_id(N''[' + ltrim(rtrim(@BaseDatos)) +
'].[dbo].[Tmp_Emi]'') and xType=''U'')
drop table [' + ltrim(rtrim(@BaseDatos)) + '].[dbo].[Tmp_Emi]'

exec (@sql)

En realidad no se que inconveniente tenga utilizar el xType en vez de
OBJECTPROPERTY(id, N'IsUserTable') = 1

- Respondiendo a Gustavo Larriera, en realidad lo realizo por un tema de
costos, debido a que realizar un Delete sobre una tabla muy grande es muy
lento

- Preguntando a MAXI, me podrías indicar cuales son tus malas experiencias
trabajando con SQL-Dinamico, por que para mi es muy comodo debido a que
puedes estandarizar tareas que trabajan sobre muchas bases de datos
realizando tareas comunes o tambien me he topado con casos en los que se
complica mucho un problema tratando de abordarlo de otra forma.

Muchas gracias a todos por su ayuda y comentarios

Atte,
Claudio Valdés

"MAXI" escribió en el mensaje
news:#
Claudio, ademas de lo que indican los compas!! no te recomiendo el uso de
SQL-Dinamico!! sacalo por favor!!




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messenger:

"Claudio Valdes" escribió en el mensaje
news:%
> Hola a todos:
>
> Estoy ejecutando un Sp que se encuentra en la base de datos Master, el
> cual
> se ejecuta desde cualquier base de datos
>
> En el Sp existe una linea que verifica si existe una tabla y la borra,
> pero
> no la ejecuta y me arroja el siguiente error
>
> Servidor: mensaje 2714, nivel 16, estado 6, línea 1
> Ya hay un objeto con el nombre 'TMP_Emi' en la base de datos.
>
> El código dentro del Sp es el siguiente
>
> IF exists (select * from dbo.sysobjects where id = object_id(N'[' +
> ltrim(rtrim(@BaseDatos)) + '].[dbo].[Tmp_Emi]') and OBJECTPROPERTY(id,
> N'IsUserTable') = 1)
> Begin
> Set @sql='drop table [' + ltrim(rtrim(@BaseDatos)) +


'].[dbo].[Tmp_Emi]'
> exec (@sql)
> End
>
> Set @sql= 'Select top 100 a.*
> Into ' + ltrim(rtrim(@BaseDatos)) + '.dbo.Tmp_Emi
> From TablaBase'
>
> Exec (@sql)
>
> Estoy ejecutando el Sp bajo la cuenta del sa y no se porque no me deja
> borrarlo, ya verifique ejecutandolo sin Sql-Dinamico
> y es el mismo problema. Al parecer tendría que ver con problemas de
> permisos
>
> Desde ya muchas gracias por su ayuda y comentarios
>
> Atte,
> Claudio Valdés
>
>











Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.788 / Virus Database: 533 - Release Date: 01/11/2004
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida