Domanda

Ho SQL Server 2008 con un server Sybase collegato e sto cercando di eseguire una stored procedure sul server Sybase utilizzando OPENQUERY. Se ho un proc memorizzato che non prende parametri riesce bene. Se ho una stored procedure con i parametri viene a mancare. Ho anche provato un proc molto di base memorizzato che ha preso solo un int una che ancora non è riuscito. Di seguito è riportato la sintassi che sto usando:

select * from 
OPENQUERY([LINKSERVER],'exec database.user.my_stored_proc ''AT'',''XXXX%'',''1111'',1')

Msg 7357, livello 16, stato 2, riga 3 Impossibile elaborare l'oggetto "exec database.user.my_stored_proc 'A', 'XXXX%', '1111', 1". Il provider OLE DB "ASEOLEDB" per "LINKSERVER" server collegato indica che sia l'oggetto non ha colonne o l'utente corrente non dispone delle autorizzazioni su quell'oggetto.

Come il proc eseguirà bene anche senza parametri, io non credo che sia un problema di autorizzazione.

È stato utile?

Soluzione

server collegati e OPENQUERY, gemme per MS SQL Server ... che sono lupi travestiti da pecore. Ho trovato le soluzioni seguenti al lavoro quando si tratta di parametri

  1. Se la SP è fondamentalmente basta selezionare le dichiarazioni, il passaggio della stessa ad una vista e basta passare istruzioni SQL tramite OPENQUERY.

  2. Costruire l'OPENQUERY come una stringa e quindi utilizzare execute_sql.

Altri suggerimenti

Questo ha funzionato per me,

SELECT * FROM OPENQUERY(LOCALSERVER, 'SET FMTONLY OFF EXEC snr.dbo.GetAllSignals @controlRunId = 25, @experimentRunId = 26')

I stava creando tabelle temporanee, ed è per questo mi sono Accesso negato

Ecco ulteriori informazioni http://www.sommarskog.se/share_data.html#OPENQUERY

creo un SP che non restituisce alcun valore e non funziona. Il tuo SP in MySQL deve restituire un valore! per esempio faccio questo in "mysql":

CREATE DEFINER=`root`@`localhost` PROCEDURE `MyPro`(IN `Name` VARCHAR(50), IN `Id` INT, OUT `Result` INT)
MODIFIES SQL DATA
BEGIN
DECLARE Result INT;
    SET Result = 0;
INSERT into MyTable (Id,Name)  VALUES(Id,Name);
SELECT Result;

END

Questo "ID" e "Nome" è parametro di input e "Risultato" è parametro di uscita e creare server collegato in SQL Server e chiamare in questo modo:

select * from openquery
(
    Test,'call mydb.MyPro(''Name'',''16'', @P0);'
)

Si lavora per me: D

Si potrebbe anche vedere se funziona precedere exec con SET FMTONLY ON:

OPENQUERY ([LINKSERVER], 'SET FMTONLY ON; database.user.my_stored_proc exec '' A'', '' XXXX% '', '' 1111 '', 1' )

Se si tenta questo e funziona, probabilmente si dovrebbe Google FMTONLY + OPENQUERY per avere un'idea di ciò che significa.

Prova questo,

SELECT * FROM OPENQUERY (linked_server_name, 'postgres_procedure_name SELECT (parametri)');

Ho sperimentato un problema molto simile, ma il mio SP non stava prendendo alcun parametro. Ho provato a sperimentare con alterare la query inviata attraverso l'openquery per includere 'SET NOCOUNT ON' e 'SET FMTONLY OFF', ma questo non ha avuto differenza.

L'unica soluzione che ha funzionato per la mia stored procedure era caduta la versione esistente, e alterando il codice per specificamente 'SET NOCOUNT ON'

Dopo aver fatto questo sono stato in grado di eseguire con successo il mio proc memorizzato tramite la mia connessione server collegato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top