2010-11-11 7 views
5

के साथ संग्रहीत proc निष्पादित करें मेरे पास एक लिंक किए गए Sybase सर्वर के साथ SQL Server 2008 है और मैं OPENQUERY का उपयोग कर Sybase सर्वर पर संग्रहीत प्रक्रिया निष्पादित करने का प्रयास कर रहा हूं। अगर मेरे पास एक संग्रहित प्रो है जो पैरामीटर नहीं लेती है तो यह ठीक हो जाती है। अगर मेरे पास पैरामीटर के साथ एक संग्रहित proc है तो यह विफल हो जाता है। मैंने एक बहुत ही बुनियादी संग्रहित प्रोसेस की भी कोशिश की जो केवल एक इंटेल ले गया जो अभी भी असफल रहा। नीचे वाक्य रचना मैं उपयोग कर रहा हूँ है:OPENQUERY

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

संदेश 7357, स्तर 16, राज्य 2, लाइन 3 वस्तु "कार्यकारी database.user.my_stored_proc 'एटी', 'XXXX%' प्रोसेस नहीं कर सकता, '1111' , 1 "। लिंक किए गए सर्वर "LINKSERVER" के लिए ओएलई डीबी प्रदाता "ASEOLEDB" इंगित करता है कि या तो ऑब्जेक्ट में कोई कॉलम नहीं है या वर्तमान उपयोगकर्ता को उस ऑब्जेक्ट पर अनुमति नहीं है।

चूंकि प्रक्रिया पैरामीटर के बिना ठीक निष्पादित करेगी, मुझे नहीं लगता कि यह एक अनुमति समस्या है।

+0

आप Sybase पर सीधे एसक्यूएल पाठ चलाने का प्रयास किया? – Andomar

+0

हाँ Sybase –

उत्तर

1

लिंक किए गए सर्वर और OPENQUERY, एमएस एसक्यूएल सर्वर के लिए रत्न ... भेड़ के कपड़ों में भेड़िये हैं। मैं जब मापदंडों

  1. के साथ काम कर सपा मूल रूप से सिर्फ SELECT स्टेटमेंट्स, इस कदम के लिए एक दृश्य के लिए एक ही है, तो काम करने के लिए और बस OPENQUERY के माध्यम से SQL कथन पारित निम्नलिखित समाधान मिल गया है।

  2. एक स्ट्रिंग के रूप में OPENQUERY बनाएं और फिर execute_sql का उपयोग करें।

1

तुम भी अगर यह सेट FMTONLY पर साथ कार्यकारी पूर्व में होना करने के लिए काम करता है देख सकते हैं:

OPENQUERY ([LINKSERVER], 'FMTONLY पर सेट; कार्यकारी database.user.my_stored_proc' 'एटी' ',' 'XXXX%' ',' 1111 '', 1 ')

यदि आप इसे आजमाते हैं और यह काम करता है, तो आपको शायद इसका अर्थ प्राप्त करने के लिए Google FMTONLY + OPENQUERY होना चाहिए।

+1

पर ठीक है निष्पादित नहीं है, यह –

12

यह मेरे लिए काम किया,

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

मैं अस्थायी तालिका बनाने गया था, और यही कारण है कि मैं पहुँच से मना कर

यहाँ मैं एक एसपी जो ऐसा नहीं करता बनाने और अधिक जानकारी http://www.sommarskog.se/share_data.html#OPENQUERY

+0

+1 काम नहीं करता है, यह मेरे लिए भी काम करता है। धन्यवाद! मैं अस्थायी तालिकाओं का उपयोग नहीं कर रहा था, लेकिन मैं रिमोट प्रो में EXEC (@VariableWithQuery) कर रहा था, जहां वह चर एक SELECT कथन से सेट किया गया था। यह तब तक काम नहीं करता जब तक कि मैंने "सेट बंद नहीं किया;" शुरुआत तक। हालांकि, अगर मैं एक एसईटी कमांड के माध्यम से चर सेट करता हूं तो यह सेट FMTONLY की आवश्यकता के बिना काम करता है। अजीब। –

+0

धन्यवाद!यह मेरे लिए भी काम करता है !!! :) – Erick

+0

उचित चेतावनी है कि इस विधि में चर्चा के अनुसार कुछ संभावित अनपेक्षित परिणाम हैं: https://stackoverflow.com/a/14299989; लेकिन, यह "इसे काम करने" का सबसे आसान तरीका है और डीटीसी से निपटने से बचने के लिए, जो शायद बदतर है, इसलिए यह ('सेट फ़्लेमनी ऑफ़ ') एक उचित काम है। – NateJ

2

है मिल गया है कोई मूल्य वापस करें और यह काम नहीं करता है। mysql में आपका एसपी एक मूल्य वापस करना होगा! उदाहरण के लिए मैं "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 

कि "आईडी" और "नाम" इनपुट पैरामीटर और "परिणाम" है उत्पादन पैरामीटर है और SQL सर्वर में जुड़े हुए सर्वर बना सकते हैं और इसे इस तरह कहते हैं:

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

यह मेरे लिए काम करता है: डी