Instruccion sql

14/07/2004 - 15:40 por Alberto Cabello | Informe spam
hola a todos
tengo el siguiente traspaso al procedimiento almacenado

With CmdSQL
.CommandType = adCmdStoredProc
.CommandText = "prc_sel_movimientos"

.Parameters.Append .CreateParameter("RETURN_VALUE", adInteger,
adParamReturnValue, 0)
.Parameters.Append .CreateParameter("empr_cod", adInteger,
adParamInput, 4, inEmpresa)
.Parameters.Append .CreateParameter("sucu_cod", adVarChar,
adParamInput, 8, 1)
.Parameters.Append .CreateParameter("fecha_uno", adDate,
adParamInput, 8, dtDesde)
.Parameters.Append .CreateParameter("fecha_dos", adDate,
adParamInput, 8, dtHasta)
.Parameters.Append .CreateParameter("modelo_uno", adChar,
adParamInput, 12, stModeloUno)
.Parameters.Append .CreateParameter("modelo_dos", adChar,
adParamInput, 12, stModeloDos)
.Parameters.Append .CreateParameter("bode_cod", adVarChar,
adParamInput, 20, stBodegas)

End With
With rsReg
.CursorLocation = adUseClient
.Open CmdSQL, , adOpenDynamic, adLockReadOnly
End With

La variable stBodegas (último traspaso). y puede contener varios código
de bodegas por ejemplo "00,07"

Este es procedimiento almacenado
CREATE PROCEDURE prc_sel_movimientos

@empr_cod numeric(4,0),
@sucu_cod varchar(8),
@fecha_uno datetime,
@fecha_dos datetime,
@modelo_uno char(12),
@modelo_dos char(12),
@bode_cod varchar(20)

AS

SELECT *
FROM [inve]
WHERE [empr_cod] = @empr_cod and [sucu_cod] = @sucu_cod and
[inve_fec_emision] between @fecha_uno and @fecha_dos and
[art_cod] between @modelo_uno and @modelo_dos and
[bode_cod] in (@bode_cod)



RETURN @@error
GO

EL PROBLEMA QUE TENGO ES QUE NO ME FUNCIONA LA CONSULTA, POR FAVOR ME
PUEDEN AYUDAR
 

Leer las respuestas

#1 Javier Loria
14/07/2004 - 16:17 | Informe spam
Hola Alberto:
El problema esta con el:
[bode_cod] in (@bode_cod)
El SQL no probarar la columna bode_cod contra cada una de los valores
incluidos en @bode_code o sea no probabara con "00" y luego con "07",
solamente si @bode_code tiene un valor de "00,07".
Para pasar este tipo de informacion debes "parsear" o sea dividir este
codigo, insertarlo en alguna tabla y hacer la consulta con un join.
Una alternativa es hacerlo en formato XML.
Ruben Vigon un conocido MVP de Visual Basic, usa la siguiente tecnica,
que me parece bien sencilla:
==ÞCLARE @doc int, @texto xml varchar(200)
SET @texto xml = '<ids><id Tipo="1"/><id Tipo="5"/><id
Tipo="8"/></ids>'
EXEC sp xml preparedocument @doc output, @texto xml
UPDATE Stocks
SET Stocks.Fecha = Getdate()
, Stocks.Unidades = Articulos.Stock Actual
FROM Articulos
INNER JOIN Stocks
ON Articulos.Codigo = Stocks.Referencia
WHERE Articulos.Tipo in (SELECT Tipo
FROM OpenXML(@doc, 'ids/id') WITH
(Tipo int))
EXEC sp xml removedocument @doc
Fijate la forma en que usa el SELECT ... FROM OpenXML(...), con esta forma
puede usar el string, convertido en documento de XML como si fuera una
Tabla. Asi es posible con muy poco codigo hacer un JOIN que filtre.
Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Alberto Cabello escribio:
hola a todos
tengo el siguiente traspaso al procedimiento almacenado

With CmdSQL
.CommandType = adCmdStoredProc
.CommandText = "prc_sel_movimientos"

.Parameters.Append .CreateParameter("RETURN_VALUE", adInteger,
adParamReturnValue, 0)
.Parameters.Append .CreateParameter("empr_cod", adInteger,
adParamInput, 4, inEmpresa)
.Parameters.Append .CreateParameter("sucu_cod", adVarChar,
adParamInput, 8, 1)
.Parameters.Append .CreateParameter("fecha_uno", adDate,
adParamInput, 8, dtDesde)
.Parameters.Append .CreateParameter("fecha_dos", adDate,
adParamInput, 8, dtHasta)
.Parameters.Append .CreateParameter("modelo_uno", adChar,
adParamInput, 12, stModeloUno)
.Parameters.Append .CreateParameter("modelo_dos", adChar,
adParamInput, 12, stModeloDos)
.Parameters.Append .CreateParameter("bode_cod", adVarChar,
adParamInput, 20, stBodegas)

End With
With rsReg
.CursorLocation = adUseClient
.Open CmdSQL, , adOpenDynamic, adLockReadOnly
End With

La variable stBodegas (último traspaso). y puede contener varios
código de bodegas por ejemplo "00,07"

Este es procedimiento almacenado
CREATE PROCEDURE prc_sel_movimientos

@empr_cod numeric(4,0),
@sucu_cod varchar(8),
@fecha_uno datetime,
@fecha_dos datetime,
@modelo_uno char(12),
@modelo_dos char(12),
@bode_cod varchar(20)

AS

SELECT *
FROM [inve]
WHERE [empr_cod] = @empr_cod and [sucu_cod] = @sucu_cod and
[inve_fec_emision] between @fecha_uno and @fecha_dos and
[art_cod] between @modelo_uno and @modelo_dos and
[bode_cod] in (@bode_cod)



RETURN @@error
GO

EL PROBLEMA QUE TENGO ES QUE NO ME FUNCIONA LA CONSULTA, POR FAVOR
ME PUEDEN AYUDAR

Preguntas similares