vinculado valores tabla sp_addlinkedserver servidor remota por permiten otro llamadas hacer funciĆ³n ejemplos consulta conexion con sql-server-2005 db2 linked-server ibm-midrange

sql server 2005 - valores - Ejecutar el procedimiento almacenado DB2 iSeries desde un servidor vinculado SQL 2005



sp_addlinkedserver ejemplos (5)

Estoy intentando ejecutar un procedimiento almacenado desde una base de datos vinculada en MS SQL 2005. La base de datos vinculada es una base de datos db2 en un servidor iseries. Estoy usando el proveedor de servicios iSeries IBMDASQL. Puedo consultar el procedimiento almacenado sin problemas usando un vbscript y un ado. Cuando trato de ejecutar el mismo procedimiento almacenado en el analizador de consultas en SQL Server, nunca veo ningún resultado. El analizador de consultas siempre muestra ''comando ejecutado'' y cuando ejecuto el seleccionar * en la tabla temporal, no aparecen valores. ¿¿¿¿¿Qué estoy haciendo mal????? ¡Gracias!

--code del analizador de consultas a continuación--

DECLARE @emailToAddress char(50) DECLARE @emailFromAddress char(50) set @emailToAddress = ''[email protected]'' set @emailFromAddress = ''[email protected]'' If Object_ID(''tempdb..#tmpResultTbl'') Is Not Null Drop Table #tmpResultTbl Create Table #tmpResultTbl ( OUTPGMID Char(150)) --SET FMTONLY Off Set NoCount On Insert Into #tmpResultTbl EXEC (''CALL abicqual.VP_GETCCEPGMID(?, ?) '', @emailToAddress, @emailFromAddress) AT MAM400 Select * From #tmpResultTbl

ACTUALIZADO: Aquí está el código actualizado para usar openquery ... todavía no hay suerte :(

DECLARE @TSQL varchar (8000) DECLARAR @emailToAddress varchar (50) DECLARAR @emailFromAddress varchar (50) SET @emailToAddress = ''[email protected]'' SET @emailFromAddress = ''[email protected]'' SET @TSQL = '' SELECCIONAR * DESDE OPENQUERY (MAM400, '''' CALL abicqual.VP_GETCCEPGMID ('''' '''' ''+ @emailToAddress +'' '''' '''', '''' '''' ''+ @emailFromAddress +'' '''' '''' ''+'') '''' '' + '')'' Imprimir @TSQL EXEC (@TSQL)

--output below-- SELECCIONE * FROM OPENQUERY (MAM400, ''CALL abicqual.VP_GETCCEPGMID ('' ''[email protected]'' '','' ''[email protected]'' '')'') Msg 7357, nivel 16, estado 2, línea 1 No se puede procesar el objeto "CALL abicqual.VP_GETCCEPGMID (''[email protected] '','' [email protected] '')". El proveedor OLE DB "IBMDASQL" para el servidor vinculado "MAM400" indica que el objeto no tiene columnas o que el usuario actual no tiene permisos sobre ese objeto.



Resulta que hay una serie de problemas con el proveedor de IBMDASQL que estaba usando. Lo crea o no, es más rápido y más confiable usar el proveedor Microsoft OLE DB para controladores ODBC. Después de crear un nuevo servidor vinculado con este proveedor, todos mis intentos anteriores de sql funcionaron correctamente. ¡Aclamaciones!


llamar al procedimiento oráculo (función) a través del servidor vinculado y obtener su resultado (valor de retorno)

--input parameters p1, p2, p3 declare @SQL nvarchar(1000) declare @param nvarchar(100) declare @result varchar(20) -- numbers may cause data type error -- (...custom actions, i.e. insert to local table) set @SQL = N''set @result = (select * from openquery(myLinkedServer, ''''select OwnerName.Function_Insert('' + cast(@p1 as varchar) + '', '' + cast(@p1 as varchar) + '', '' + cast(@p3 as varchar) + '') from dual''''))'' set @param = ''@result varchar output'' EXEC sp_executesql @SQL, @param, @result output if @result ''0'' goto ERROR -- (...custom actions) return 1 -- OK ERROR: -- (...custom actions, i.e. delete from local table with(rowlock)) return 0 -- KO


Estoy utilizando el proveedor Microsoft DB2OLEDB que está disponible como parte del Feature Pack para SQL 2005 - abril de 2006. También forma parte de Host Integration Services. Se conecta al AS / 400 utilizando el protocolo DRDA (estilo Oracle).

Puede descargarlo por separado pero solo se instalará en SQL estándar, empresa o desarrollador (no expreso).

También encuentro que crear la consulta completa que quiero ejecutar en el cuadro de DB2 / 400 y luego envolverlo en una cadena VARCHAR (MAX) que también incluye el "SELECT * FROM OPENQUERY" (--linkedservername -, - DB2 / Consulta 400 con params--) "y luego usar los comandos sp_execute o EXEC devuelve los mejores resultados.

Incluso es posible ajustar el código RPG dentro de los procedimientos SQL de DB2 / 400 y luego llamarlos (con params) desde el servidor MS SQL y devolver cualquier conjunto de resultados como una tabla MS SQL.


La solución es agregar corchetes a la declaración de llamada. Sin embargo, aún no podrá seleccionar en una tabla al final de SQL Server a menos que haya instalado soporte para transacciones distribuidas. No estoy seguro de por qué necesita una transacción, pero no funcionará a menos que tenga esta configuración.

EXEC (''{CALL abicqual.VP_GETCCEPGMID (?)}'', @emailToAddress, @emailFromAddress) AT MAM400