Ver Mensaje Individual
  #6 (permalink)  
Antiguo 28/08/2008, 11:44
Avatar de Andres95
Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 20 años
Puntos: 38
Respuesta: Ayuda para parametrizar un OPENQUERY

trabaje un buen tiempo interactuando con un sistema en DB2 desde mi sistema en SQL Server, jejeje


seria algo mas o menos asi...

ya solo tendrias que ajustar detalles de sintaxis que pudieran generarse..

Código:
DECLARE @CONTENEDORAS VARCHAR(8000), @sqlQuery varchar(8000)


SET @CONTENEDORAS = ''
Set @sqlQuery = ''

SELECT @CONTENEDORAS = @CONTENEDORAS + '''' + CAST(ETIQUETACONTENEDORA AS CHAR(12)) + ''','
FROM REC_RECLAMOS

if len(@CONTENEDORAS) > 0
	Set @CONTENEDORAS = SUBSTRING(@CONTENEDORAS, 1, len(@CONTENEDORAS)-1)   

--- con un print hay que validar que esta variable sea una lista valida 
--- de items varchar, algo como  'a','b','c'
-- Ademas hay que validar que la concanetacion no sobrepase los 8000 caracteres
-- sino quedara trunca y hara que truene el execute



Set @sqlQuery = @sqlQuery + ' SELECT * FROM OPENQUERY(CURRENTWMS, '
Set @sqlQuery = @sqlQuery + ' ''SELECT BPD_WFNAME AS [USUARIO], '
Set @sqlQuery = @sqlQuery + ' BCH_NROCNT AS [CONTENEDORA], '
Set @sqlQuery = @sqlQuery + ' BCH_CODLOC AS [LOCAL], '
Set @sqlQuery = @sqlQuery + ' BPD_WFCASE AS [CAJAS], '
Set @sqlQuery = @sqlQuery + ' BCH_FECENT AS [FECHA] '
Set @sqlQuery = @sqlQuery + ' FROM FILELIB.BWPRDDIA T1 INNER JOIN FILELIB.BWCNTH01 T2  '
Set @sqlQuery = @sqlQuery + ' ON BPD_NROASI=BCH_NROASG AND BPD_WFASID=DIGITS(DECIMAL(BCH_CODLOC, 5, 0)) '
Set @sqlQuery = @sqlQuery + ' AND T1.CODFAC=T2.CODFAC AND T1.CODWHS=T2.CODWHS AND T1.WFACTD+19000000=T2.FECCRE '
Set @sqlQuery = @sqlQuery + ' AND DIGITS(BCH_NROCNT) IN ( '

-- Para evitar que se sobrepasen los 8000 caracteres en sqlquery no concatenaremos contenedoras
-- se ejecuta directo

print @sqlQuery + @CONTENEDORAS + ') '') '

-- igual, primero imprime la cadena y ajusta lo necesario para que esa cadena impresa se pueda
-- ejecutar sin problemas de sintaxis desde el query analizer..y ya despues agregas el execute...

Execute (@sqlQuery + @CONTENEDORAS + ') '') ' )

Saludos! espero te sirva...
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.