Como ejecutar un parametro como sql y guaradarlo en un cursor

28/04/2005 - 17:45 por Victor Rios | Informe spam
Hola ..

Mi pregunta es la siguiente como puedo hacer para que mi Store reciba un
parametro de cadena que contiene un cadena Sql o parte del Where que este
parametro se concatene o se ejecute y luego guardar estos registros en un
cursor .

El objetivo de esto es que tengo que ir guardando el resultado de la cadena
Sql en otra tabla .

Muchas gracias

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
28/04/2005 - 17:56 | Informe spam
Victor Rios,

Lo que pides se puede hacer, pero es de las peores soluciones que puedas
usar en sql server. Por que no nos explicas lo que quieres hacer con mas
detalle.


AMB

"Victor Rios" wrote:

Hola ..

Mi pregunta es la siguiente como puedo hacer para que mi Store reciba un
parametro de cadena que contiene un cadena Sql o parte del Where que este
parametro se concatene o se ejecute y luego guardar estos registros en un
cursor .

El objetivo de esto es que tengo que ir guardando el resultado de la cadena
Sql en otra tabla .

Muchas gracias



Respuesta Responder a este mensaje
#2 Victor Rios
28/04/2005 - 18:08 | Informe spam
Claro te explico

Mira lo que pasa es q tengo guardado en la tabla cabecera los cirterios de
un filtro para listar las ubicaciones de los productos

Ejemplo esto es lo que guardo en el campo de la cabecera
Este es el campo
SELECT C.cliCodigo, C.cliNombre, L.locCodigo, L.locDescripcion,
Sloc.slocCodigo, Sloc.slocNombre, A.almCodigo, A.almDescripcion,
F.famCodigo, F.famDescripcion, P.proCodigo, P.proCodInter,
P.proDescripcion, Lote.slpCodigo, Lote.Lote, Lote.FechaExp, R.rckCodigo,
R.rckNumRack, U.UbiCodigo, UDet.UbidCodigo, UDet.UbidCantidad FROM
dbo.tblSubLocalAlm Sla INNER JOIN dbo.tblSubLocal Sloc ON Sla.slocCodigo =
Sloc.slocCodigo INNER JOIN dbo.tblUbicacion U ON Sla.slaCodigo = U.slacodigo
INNER JOIN dbo.tblUbicacionDet UDet ON U.UbiCodigo = UDet.UbiCodigo INNER
JOIN dbo.tblProductos P ON UDet.proCodigo = P.proCodigo INNER JOIN
dbo.tblSaldoLoteProd Lote ON P.proCodigo = Lote.proCodigo AND UDet.slpCodigo
= Lote.slpCodigo INNER JOIN dbo.tblRack R ON Sloc.slocCodigo = R.slocCodigo
AND U.rckCodigo = R.rckCodigo INNER JOIN dbo.tblAlmacen A ON
Sla.almCodigo = A.almCodigo INNER JOIN dbo.tblFamilias F ON P.famCodigo =
F.famCodigo INNER JOIN dbo.tblLocal L ON Sloc.locCodigo = L.locCodigo INNER
JOIN dbo.tblCliente C ON Lote.cliCodigo = C.cliCodigo AND P.cliCodigo =
C.cliCodigo AND U.cliCodigo = C.cliCodigo INNER JOIN dbo.tblClienteUsuario
Cu ON C.cliCodigo = Cu.cliCodigo WHERE Sla.Activo=1 AND Sloc.Activo=1 AND
U.Activo=1 AND UDet.Activo=1 AND P.Activo=1 AND Lote.Activo=1 AND R.Activo=1
AND A.Activo=1 AND F.Activo=1 AND L.Activo=1 AND Cu.Activo=1 AND C.Activo=1
AND Sla.almCodigo = 8 AND P.proCodInter >= |PFIPRT44| AND
(CONVERT(VARCHAR(5), R.rckNumRack) + CONVERT(VARCHAR(5), U.UbiColumna) +
CONVERT(VARCHAR(5), U.UbiNivel)) <= |1A2| AND Cu.usrCodigo=|VRIOS| AND
U.cliCodigo=4 AND C.cliCodigo=4 AND Sloc.locCodigo=7 AND Sla.slocCodigo = 5
GROUP BY C.cliCodigo, C.cliNombre, L.locCodigo, L.locDescripcion,
Sloc.slocCodigo, Sloc.slocNombre, A.almCodigo, A.almDescripcion,
F.famCodigo, F.famDescripcion, P.proCodigo, P.proCodInter,
P.proDescripcion, Lote.slpCodigo, Lote.Lote, Lote.FechaExp, R.rckCodigo,
R.rckNumRack, U.UbiColumna, U.UbiNivel,U.UbiCodigo, UDet.UbidCodigo,
UDet.UbidCantidad

Ya ahora este dato lo quiero recibir como parametro de mi store proc mandado
desde visual basic puede ser toda la cadena o solo la parte de where este
Cadena Sql me devuelven registros si es que lo ejecuto ,ya esos registros
quiero tenerlos en un Cursor por que necesito hacer inserts en otra tabla
que es detalle .

Si algo no te a quedado claro me lo dices por favor y muchas gracias por
atender mi pregunta

"Alejandro Mesa" escribió en el
mensaje news:
Victor Rios,

Lo que pides se puede hacer, pero es de las peores soluciones que puedas
usar en sql server. Por que no nos explicas lo que quieres hacer con mas
detalle.


AMB

"Victor Rios" wrote:

Hola ..

Mi pregunta es la siguiente como puedo hacer para que mi Store reciba un
parametro de cadena que contiene un cadena Sql o parte del Where que este
parametro se concatene o se ejecute y luego guardar estos registros en un
cursor .

El objetivo de esto es que tengo que ir guardando el resultado de la
cadena
Sql en otra tabla .

Muchas gracias



Respuesta Responder a este mensaje
#3 Alejandro Mesa
28/04/2005 - 18:54 | Informe spam
Victor,

Entiendo lo que quieres hacer, lo que no entiendo es porque lo quieres hacer
asi.Por que guardas el codigo en un campo de characteres en una tabla?, por
que no lo pones en un procedimiento almacenado?. Me inmagino que en alguna
parte sustituyes parte de esta sentencia, pues el codigo no es compatible con
t-sql, por ejemplo:

CONVERT(VARCHAR(5), U.UbiNivel)) <= |1A2| AND Cu.usrCodigo=|VRIOS| AND



Para poder hacer lo que quieres, el procedimiento almacenado debe usar
EXEC() o sp_executesql para ejecutar una cadena que a sido armada
dinamicamente, preferible que use sp_executesql pues este puede trabajar con
parametros de salida.

Ejemplo:

use northwind
go

create procedure dbo.usp_proc1
@s nvarchar(3000),
@c cursor varying output
as
set nocount on

declare @sql nvarchar(4000)

set @sql = N'set @c = cursor for ' + @s + N'; open @c'
exec sp_executesql @sql, N'@c cursor output', @c output

return @@error
go

declare @orderid int
declare @orderdate char(8)
declare @c cursor

exec dbo.usp_proc1 N'select orderid, convert(char(8), orderdate, 112) from
dbo.orders where orderdate >= ''19970101'' and orderdate < ''19980101''', @c
output

if cursor_status('variable', '@c') = 1
begin

while 1 = 1
begin
fetch next from @c into @orderid, @orderdate

if @@error != 0 or @@fetch_status != 0 break

raiserror('%d %s', 10, 1, @orderid, @orderdate) with nowait
end

close @c
deallocate @c

end
go

drop procedure dbo.usp_proc1
go

Aca te paso un link a un articulo donde puedes leer los pros y cons cuando
usas sql dinamico.

The Curse and Blessings of Dynamic SQL
http://www.sommarskog.se/dynamic_sql.html


AMB

"Victor Rios" wrote:

Claro te explico

Mira lo que pasa es q tengo guardado en la tabla cabecera los cirterios de
un filtro para listar las ubicaciones de los productos

Ejemplo esto es lo que guardo en el campo de la cabecera
Este es el campo
SELECT C.cliCodigo, C.cliNombre, L.locCodigo, L.locDescripcion,
Sloc.slocCodigo, Sloc.slocNombre, A.almCodigo, A.almDescripcion,
F.famCodigo, F.famDescripcion, P.proCodigo, P.proCodInter,
P.proDescripcion, Lote.slpCodigo, Lote.Lote, Lote.FechaExp, R.rckCodigo,
R.rckNumRack, U.UbiCodigo, UDet.UbidCodigo, UDet.UbidCantidad FROM
dbo.tblSubLocalAlm Sla INNER JOIN dbo.tblSubLocal Sloc ON Sla.slocCodigo =
Sloc.slocCodigo INNER JOIN dbo.tblUbicacion U ON Sla.slaCodigo = U.slacodigo
INNER JOIN dbo.tblUbicacionDet UDet ON U.UbiCodigo = UDet.UbiCodigo INNER
JOIN dbo.tblProductos P ON UDet.proCodigo = P.proCodigo INNER JOIN
dbo.tblSaldoLoteProd Lote ON P.proCodigo = Lote.proCodigo AND UDet.slpCodigo
= Lote.slpCodigo INNER JOIN dbo.tblRack R ON Sloc.slocCodigo = R.slocCodigo
AND U.rckCodigo = R.rckCodigo INNER JOIN dbo.tblAlmacen A ON
Sla.almCodigo = A.almCodigo INNER JOIN dbo.tblFamilias F ON P.famCodigo =
F.famCodigo INNER JOIN dbo.tblLocal L ON Sloc.locCodigo = L.locCodigo INNER
JOIN dbo.tblCliente C ON Lote.cliCodigo = C.cliCodigo AND P.cliCodigo =
C.cliCodigo AND U.cliCodigo = C.cliCodigo INNER JOIN dbo.tblClienteUsuario
Cu ON C.cliCodigo = Cu.cliCodigo WHERE Sla.Activo=1 AND Sloc.Activo=1 AND
U.Activo=1 AND UDet.Activo=1 AND P.Activo=1 AND Lote.Activo=1 AND R.Activo=1
AND A.Activo=1 AND F.Activo=1 AND L.Activo=1 AND Cu.Activo=1 AND C.Activo=1
AND Sla.almCodigo = 8 AND P.proCodInter >= |PFIPRT44| AND
(CONVERT(VARCHAR(5), R.rckNumRack) + CONVERT(VARCHAR(5), U.UbiColumna) +
CONVERT(VARCHAR(5), U.UbiNivel)) <= |1A2| AND Cu.usrCodigo=|VRIOS| AND
U.cliCodigo=4 AND C.cliCodigo=4 AND Sloc.locCodigo=7 AND Sla.slocCodigo = 5
GROUP BY C.cliCodigo, C.cliNombre, L.locCodigo, L.locDescripcion,
Sloc.slocCodigo, Sloc.slocNombre, A.almCodigo, A.almDescripcion,
F.famCodigo, F.famDescripcion, P.proCodigo, P.proCodInter,
P.proDescripcion, Lote.slpCodigo, Lote.Lote, Lote.FechaExp, R.rckCodigo,
R.rckNumRack, U.UbiColumna, U.UbiNivel,U.UbiCodigo, UDet.UbidCodigo,
UDet.UbidCantidad

Ya ahora este dato lo quiero recibir como parametro de mi store proc mandado
desde visual basic puede ser toda la cadena o solo la parte de where este
Cadena Sql me devuelven registros si es que lo ejecuto ,ya esos registros
quiero tenerlos en un Cursor por que necesito hacer inserts en otra tabla
que es detalle .

Si algo no te a quedado claro me lo dices por favor y muchas gracias por
atender mi pregunta

"Alejandro Mesa" escribió en el
mensaje news:
> Victor Rios,
>
> Lo que pides se puede hacer, pero es de las peores soluciones que puedas
> usar en sql server. Por que no nos explicas lo que quieres hacer con mas
> detalle.
>
>
> AMB
>
> "Victor Rios" wrote:
>
>> Hola ..
>>
>> Mi pregunta es la siguiente como puedo hacer para que mi Store reciba un
>> parametro de cadena que contiene un cadena Sql o parte del Where que este
>> parametro se concatene o se ejecute y luego guardar estos registros en un
>> cursor .
>>
>> El objetivo de esto es que tengo que ir guardando el resultado de la
>> cadena
>> Sql en otra tabla .
>>
>> Muchas gracias
>>
>>
>>



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