SPD dinamico

12/05/2006 - 12:38 por Alicia | Informe spam
Quiero hacer un procedimiento almacenado de eliminacion dinámico, que
elimine en una tabla diferente dependiendo de un parametro pero me dice que
debo declarar la variable. Este es mi codigo

CREATE PROCEDURE [SPD_SubCuentas_1]
(@IdSubCuenta_1 [int],
@CodEmpresa_2 varchar(4))

AS

Declare @Tabla as nvarchar(4)
Set @Tabla = @CodEmpresa_2 + 'SubCuentasSaldos'

DELETE [@Tabla]
WHERE ([IdSubCuenta] = @IdSubCuenta_1))

La tabla sobre la que quiero eliminar cambia dependiendo del parametro
@CodEmpresa_2.
El error que me da es: "El nombre de objeto @Tabla no es valido"

¿Alguien sabe como resolver mi problema?
Muchas gracias y saludos.

Preguntas similare

Leer las respuestas

#1 Mauro SB.
12/05/2006 - 14:53 | Informe spam
ojo con el SQL Dinamico

CREATE PROCEDURE [SPD_SubCuentas_1]
(@IdSubCuenta_1 [int],
@CodEmpresa_2 varchar(4))

AS
declare @SQL as nvarchar(300)
Declare @Tabla as nvarchar(4)
Set @Tabla = @CodEmpresa_2 + 'SubCuentasSaldos'
Set @SQL = 'DELETE ' + @Tabla + ' WHERE ([IdSubCuenta] = '+
@IdSubCuenta_1 +')'
exec( @sql)
Respuesta Responder a este mensaje
#2 BitOne®
12/05/2006 - 15:06 | Informe spam
Debes utilizar sql dinamico, te muestro como es.:

use pubs
go
if exists ( select name from sysobjects where type = 'U' and name 'MMSubCuentasSaldos')
begin
drop table MMSubCuentasSaldos
end
go
create table MMSubCuentasSaldos (
Secuencia int identity(1,1),
IdSubCuenta integer
)
go

insert into MMSubCuentasSaldos values ( 121000 )
insert into MMSubCuentasSaldos values ( 121001 )
insert into MMSubCuentasSaldos values ( 121002 )
insert into MMSubCuentasSaldos values ( 121003 )
insert into MMSubCuentasSaldos values ( 121004 )
insert into MMSubCuentasSaldos values ( 121005 )
go
if Exists ( select name from sysobjects where type ='P' and name
='spd_subcuentas_1' )
begin
drop procedure spd_subcuentas_1
end
go
create procedure spd_subcuentas_1
@IdSubCuenta_1 integer,
@CodEmpresa_2 nvarchar(4)
as
begin
declare @tabla as nvarchar(200)
declare @SentenciaSql as nvarchar(200)

set @tabla = @codEmpresa_2 + 'SubCuentasSaldos'

Set @SentenciaSql = 'Delete From '+@tabla+' Where [IdSubCuenta] = '
+ convert(nvarchar(8),@IdSubCuenta_1)

exec sp_executesql @SentenciaSql

end
go
select * from MMSubCuentasSaldos
go
exec spd_subcuentas_1 121000, MM
go
select * from MMSubCuentasSaldos



Puedes copiar y pegar a gusto con la base de ejemplo pubs o en cualquier
otra base que tengas en la cual puedas hacer pruebas

Nota: Leer los libros en Linea para mayor referencia sobre sp_executesql.


Saludos,
BitOne®


"Alicia" wrote in message
news:#
Quiero hacer un procedimiento almacenado de eliminacion dinámico, que
elimine en una tabla diferente dependiendo de un parametro pero me dice


que
debo declarar la variable. Este es mi codigo

CREATE PROCEDURE [SPD_SubCuentas_1]
(@IdSubCuenta_1 [int],
@CodEmpresa_2 varchar(4))

AS

Declare @Tabla as nvarchar(4)
Set @Tabla = @CodEmpresa_2 + 'SubCuentasSaldos'

DELETE [@Tabla]
WHERE ([IdSubCuenta] = @IdSubCuenta_1))

La tabla sobre la que quiero eliminar cambia dependiendo del parametro
@CodEmpresa_2.
El error que me da es: "El nombre de objeto @Tabla no es valido"

¿Alguien sabe como resolver mi problema?
Muchas gracias y saludos.


Respuesta Responder a este mensaje
#3 Alicia
12/05/2006 - 18:00 | Informe spam
Muchas gracias. Ya me funciona correctamente.
Un saludo.
Respuesta Responder a este mensaje
#4 Maxi [MVP]
13/05/2006 - 01:10 | Informe spam
Hola, y yo pregunto, cual es la ventaja entonces si queres hacer esto de
ponerlo en un SP? si lo vas a hacer dinamico perdes una de las grandes
virtudes de los SP y es la seguridad, por ej: el usuario que llame al SP
este debera tener permisos sobre los objetos que ejecuta el SP_dinamico,
entonces para que lo pones en un sp? Lo que se debe hacer es un SP para cada
tabla que haga esta operacion, entonces vas a tener Clienes_delete,
Proveedores_delete.
Ahora si me dices que esto es mucho trabajo, ya te respondo: en lo absoluto,
conseguite algun generador de codigo (CodeSmith, Mygenerations) o hasta te
lo podes hacer vos misma y lo haces. Yo hago asi y por ej hacer todos los SP
de CRUD en una base de datos no demora mas de 50s :)


Salu2
-
[Microsoft MVP] SQL Server
Orador para Culminis Latam
www.sqlgurus.org

MSN:

"Alicia" escribió en el mensaje
news:%
Quiero hacer un procedimiento almacenado de eliminacion dinámico, que
elimine en una tabla diferente dependiendo de un parametro pero me dice
que debo declarar la variable. Este es mi codigo

CREATE PROCEDURE [SPD_SubCuentas_1]
(@IdSubCuenta_1 [int],
@CodEmpresa_2 varchar(4))

AS

Declare @Tabla as nvarchar(4)
Set @Tabla = @CodEmpresa_2 + 'SubCuentasSaldos'

DELETE [@Tabla]
WHERE ([IdSubCuenta] = @IdSubCuenta_1))

La tabla sobre la que quiero eliminar cambia dependiendo del parametro
@CodEmpresa_2.
El error que me da es: "El nombre de objeto @Tabla no es valido"

¿Alguien sabe como resolver mi problema?
Muchas gracias y saludos.

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