Necesito ayuda en un Store Procedure

08/11/2005 - 21:18 por Angel Lopez | Informe spam
Al programar el siguiente Store Procedure me envia un error, donde me dice
que declare la variable lcFile, lo que intento hacer es pasarle varios
valores desde Visual Basic, como nombre del archivo donde ejecutará el
UPDATE, pero es ahi donde me indica que declare la variable lcFile, espero me
puedan ayudar

Create Procedure PasaVtas
@idPromoLc varchar(20),
@lcFile varchar(19),
@lcFec1 varchar(19),
@lcFec2 varchar(19)
As
Update Promo_Det
Set Ventas = (Select Sum(Cantidad) From @lcFile
Where Cve_Suc = Promo_Det.Cve_Suc
And rtrim(Prod) COLLATE Modern_Spanish_CI_AS =
rtrim(Promo_Det.Cve_Prod)
And (Dia >= CONVERT(DATETIME, @lcFec1, 102)
And Dia <= CONVERT(DATETIME, @lcFec2, 102)))
Where idPromo = @idPromoLc

GO

Preguntas similare

Leer las respuestas

#1 Maxi [MVP]
08/11/2005 - 21:25 | Informe spam
Hola, para hacerlo asi debes usar SQL-Dinamico (Sp_Executesql) pero es un
tecnica que tiene serios problemas con la seguridad.


La pregunta es: porque hacer un store generico asi?? o bien haces uno para
cada tabla o no hagas SP, porque le quitas todas las ventajas al mismo


Salu2
-
[MVP] SQL Server
Orador para Culminis Latam
Miembro de GUESS



"Angel Lopez" escribió en el mensaje
news:
Al programar el siguiente Store Procedure me envia un error, donde me dice
que declare la variable lcFile, lo que intento hacer es pasarle varios
valores desde Visual Basic, como nombre del archivo donde ejecutará el
UPDATE, pero es ahi donde me indica que declare la variable lcFile, espero
me
puedan ayudar

Create Procedure PasaVtas
@idPromoLc varchar(20),
@lcFile varchar(19),
@lcFec1 varchar(19),
@lcFec2 varchar(19)
As
Update Promo_Det
Set Ventas = (Select Sum(Cantidad) From @lcFile
Where Cve_Suc = Promo_Det.Cve_Suc
And rtrim(Prod) COLLATE Modern_Spanish_CI_AS > rtrim(Promo_Det.Cve_Prod)
And (Dia >= CONVERT(DATETIME, @lcFec1, 102)
And Dia <= CONVERT(DATETIME, @lcFec2, 102)))
Where idPromo = @idPromoLc

GO

Respuesta Responder a este mensaje
#2 Isaias
08/11/2005 - 21:30 | Informe spam
Angel

Con sus reservas, podrias utilizar QUERY DINAMICO, solo cuida la inyeccion
de codigo.

Ejemplo:

CREATE PROCEDURE pr_DespliegaTabla
@MyTabla VARCHAR(50)
AS
SET NOCOUNT ON
DECLARE @SQLString NVARCHAR(100)
SET @SQLString = N'SELECT * FROM '+@MyTabla
EXEC sp_executesql @SQLString



Saludos
IIslas


"Angel Lopez" escribió:

Al programar el siguiente Store Procedure me envia un error, donde me dice
que declare la variable lcFile, lo que intento hacer es pasarle varios
valores desde Visual Basic, como nombre del archivo donde ejecutará el
UPDATE, pero es ahi donde me indica que declare la variable lcFile, espero me
puedan ayudar

Create Procedure PasaVtas
@idPromoLc varchar(20),
@lcFile varchar(19),
@lcFec1 varchar(19),
@lcFec2 varchar(19)
As
Update Promo_Det
Set Ventas = (Select Sum(Cantidad) From @lcFile
Where Cve_Suc = Promo_Det.Cve_Suc
And rtrim(Prod) COLLATE Modern_Spanish_CI_AS =
rtrim(Promo_Det.Cve_Prod)
And (Dia >= CONVERT(DATETIME, @lcFec1, 102)
And Dia <= CONVERT(DATETIME, @lcFec2, 102)))
Where idPromo = @idPromoLc

GO

Respuesta Responder a este mensaje
#3 Angel Lopez
08/11/2005 - 22:26 | Informe spam
Isaias gracias por la respuesta pero como que no me queda muy claro,
siguiendo el ejemplo como es que quedaría en un query dinámico? O en su
defecto dado como esta programado que es lo que me hace falta

Gracias




"Isaias" escribió:

Angel

Con sus reservas, podrias utilizar QUERY DINAMICO, solo cuida la inyeccion
de codigo.

Ejemplo:

CREATE PROCEDURE pr_DespliegaTabla
@MyTabla VARCHAR(50)
AS
SET NOCOUNT ON
DECLARE @SQLString NVARCHAR(100)
SET @SQLString = N'SELECT * FROM '+@MyTabla
EXEC sp_executesql @SQLString



Saludos
IIslas


"Angel Lopez" escribió:

> Al programar el siguiente Store Procedure me envia un error, donde me dice
> que declare la variable lcFile, lo que intento hacer es pasarle varios
> valores desde Visual Basic, como nombre del archivo donde ejecutará el
> UPDATE, pero es ahi donde me indica que declare la variable lcFile, espero me
> puedan ayudar
>
> Create Procedure PasaVtas
> @idPromoLc varchar(20),
> @lcFile varchar(19),
> @lcFec1 varchar(19),
> @lcFec2 varchar(19)
> As
> Update Promo_Det
> Set Ventas = (Select Sum(Cantidad) From @lcFile
> Where Cve_Suc = Promo_Det.Cve_Suc
> And rtrim(Prod) COLLATE Modern_Spanish_CI_AS =
> rtrim(Promo_Det.Cve_Prod)
> And (Dia >= CONVERT(DATETIME, @lcFec1, 102)
> And Dia <= CONVERT(DATETIME, @lcFec2, 102)))
> Where idPromo = @idPromoLc
>
> GO
>
Respuesta Responder a este mensaje
#4 Alejandro Mesa
08/11/2005 - 22:47 | Informe spam
Trata:

Create Procedure PasaVtas
@idPromoLc varchar(20),
@lcFile varchar(19),
@lcFec1 varchar(19),
@lcFec2 varchar(19)
As
set nocount on

declare @sql nvarchar(4000)

set @sql = N'
Update Promo_Det
Set Ventas = (Select Sum(Cantidad) From ' + @lcFile + N'
Where Cve_Suc = Promo_Det.Cve_Suc
And rtrim(Prod) COLLATE Modern_Spanish_CI_AS =
rtrim(Promo_Det.Cve_Prod)
And (Dia >= CONVERT(DATETIME, @lcFec1, 102)
And Dia <= CONVERT(DATETIME, @lcFec2, 102)))
Where idPromo = @idPromoLc'

exec sp_executesql @sql, N'@idPromoLc varchar(20), @lcFec1 varchar(19),
@lcFec2 varchar(19)', @idPromoLc, @lcFec1, @lcFec2
go

Las virtudes y maldades del SQL dinámico
http://www.hayes.ch/sql/sql_dinamico.html


AMB

"Angel Lopez" wrote:

Isaias gracias por la respuesta pero como que no me queda muy claro,
siguiendo el ejemplo como es que quedaría en un query dinámico? O en su
defecto dado como esta programado que es lo que me hace falta

Gracias




"Isaias" escribió:

> Angel
>
> Con sus reservas, podrias utilizar QUERY DINAMICO, solo cuida la inyeccion
> de codigo.
>
> Ejemplo:
>
> CREATE PROCEDURE pr_DespliegaTabla
> @MyTabla VARCHAR(50)
> AS
> SET NOCOUNT ON
> DECLARE @SQLString NVARCHAR(100)
> SET @SQLString = N'SELECT * FROM '+@MyTabla
> EXEC sp_executesql @SQLString
>
>
>
> Saludos
> IIslas
>
>
> "Angel Lopez" escribió:
>
> > Al programar el siguiente Store Procedure me envia un error, donde me dice
> > que declare la variable lcFile, lo que intento hacer es pasarle varios
> > valores desde Visual Basic, como nombre del archivo donde ejecutará el
> > UPDATE, pero es ahi donde me indica que declare la variable lcFile, espero me
> > puedan ayudar
> >
> > Create Procedure PasaVtas
> > @idPromoLc varchar(20),
> > @lcFile varchar(19),
> > @lcFec1 varchar(19),
> > @lcFec2 varchar(19)
> > As
> > Update Promo_Det
> > Set Ventas = (Select Sum(Cantidad) From @lcFile
> > Where Cve_Suc = Promo_Det.Cve_Suc
> > And rtrim(Prod) COLLATE Modern_Spanish_CI_AS =
> > rtrim(Promo_Det.Cve_Prod)
> > And (Dia >= CONVERT(DATETIME, @lcFec1, 102)
> > And Dia <= CONVERT(DATETIME, @lcFec2, 102)))
> > Where idPromo = @idPromoLc
> >
> > GO
> >
Respuesta Responder a este mensaje
#5 Angel Lopez
08/11/2005 - 22:56 | Informe spam
Muchas gracias Alejandro por la respuesta

Saludos


"Alejandro Mesa" escribió:

Trata:

Create Procedure PasaVtas
@idPromoLc varchar(20),
@lcFile varchar(19),
@lcFec1 varchar(19),
@lcFec2 varchar(19)
As
set nocount on

declare @sql nvarchar(4000)

set @sql = N'
Update Promo_Det
Set Ventas = (Select Sum(Cantidad) From ' + @lcFile + N'
Where Cve_Suc = Promo_Det.Cve_Suc
And rtrim(Prod) COLLATE Modern_Spanish_CI_AS =
rtrim(Promo_Det.Cve_Prod)
And (Dia >= CONVERT(DATETIME, @lcFec1, 102)
And Dia <= CONVERT(DATETIME, @lcFec2, 102)))
Where idPromo = @idPromoLc'

exec sp_executesql @sql, N'@idPromoLc varchar(20), @lcFec1 varchar(19),
@lcFec2 varchar(19)', @idPromoLc, @lcFec1, @lcFec2
go

Las virtudes y maldades del SQL dinámico
http://www.hayes.ch/sql/sql_dinamico.html


AMB

"Angel Lopez" wrote:

> Isaias gracias por la respuesta pero como que no me queda muy claro,
> siguiendo el ejemplo como es que quedaría en un query dinámico? O en su
> defecto dado como esta programado que es lo que me hace falta
>
> Gracias
>
>
>
>
> "Isaias" escribió:
>
> > Angel
> >
> > Con sus reservas, podrias utilizar QUERY DINAMICO, solo cuida la inyeccion
> > de codigo.
> >
> > Ejemplo:
> >
> > CREATE PROCEDURE pr_DespliegaTabla
> > @MyTabla VARCHAR(50)
> > AS
> > SET NOCOUNT ON
> > DECLARE @SQLString NVARCHAR(100)
> > SET @SQLString = N'SELECT * FROM '+@MyTabla
> > EXEC sp_executesql @SQLString
> >
> >
> >
> > Saludos
> > IIslas
> >
> >
> > "Angel Lopez" escribió:
> >
> > > Al programar el siguiente Store Procedure me envia un error, donde me dice
> > > que declare la variable lcFile, lo que intento hacer es pasarle varios
> > > valores desde Visual Basic, como nombre del archivo donde ejecutará el
> > > UPDATE, pero es ahi donde me indica que declare la variable lcFile, espero me
> > > puedan ayudar
> > >
> > > Create Procedure PasaVtas
> > > @idPromoLc varchar(20),
> > > @lcFile varchar(19),
> > > @lcFec1 varchar(19),
> > > @lcFec2 varchar(19)
> > > As
> > > Update Promo_Det
> > > Set Ventas = (Select Sum(Cantidad) From @lcFile
> > > Where Cve_Suc = Promo_Det.Cve_Suc
> > > And rtrim(Prod) COLLATE Modern_Spanish_CI_AS =
> > > rtrim(Promo_Det.Cve_Prod)
> > > And (Dia >= CONVERT(DATETIME, @lcFec1, 102)
> > > And Dia <= CONVERT(DATETIME, @lcFec2, 102)))
> > > Where idPromo = @idPromoLc
> > >
> > > GO
> > >
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida