2010-11-11 12 views
5

ile çalıştır Bağlı bir Sybase sunucusuna sahip SQL Server 2008 var ve OPENQUERY kullanarak Sybase sunucusunda saklı bir yordamı çalıştırmaya çalışıyorum. Parametre almayan bir saklı progem var ise, başarılı olur. Eğer kayıtlı bir proc parametresi varsa, başarısız olur. Hatta, sadece hala başarısız olan çok basit bir depolanmış proc bile denedim. Aşağıda kullanıyorum sözdizimi:Depolanmış proc'u OPENQUERY

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

Msg 7357, Level 16, State 2, Line 3 , 'XXXX%' AT 'nesne "exec database.user.my_stored_proc işlenemez, '1111' 1" . Bağlantılı sunucu "LINKSERVER" için OLE DB sağlayıcısı "ASEOLEDB", nesnenin sütun içermediğini veya geçerli kullanıcının bu nesne üzerinde izinleri olmadığını belirtir.

Proc parametreler olmadan gayet iyi çalışacağından, bunun bir izin sorunu olduğunu düşünmüyorum.

+0

sen Sybase doğrudan SQL metni çalıştırmayı denediniz mi? – Andomar

+0

Evet, Sybase –

cevap

1

Bağlantılı Sunucular ve OPENQUERY, Mücevherler, koyun giyiminde kurt olan MS SQL Server'a. Ben SP temelde sadece SEÇ ifadeleri, hareket bir GÖRÜNÜM için aynı ise parametreleri

  1. ile uğraşırken çalışmak ve sadece OPENQUERY yoluyla SQL ifadelerini geçmesine aşağıdaki çözümleri bulduk.

  2. OPENQUERY öğesini bir dize olarak oluşturun ve sonra execute_sql komutunu kullanın.

1

o FMTONLY AÇIK SET ile exec önüne için çalışır durumunda da görebiliyordu:

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

Eğer bunu denerseniz ve işe yarıyorsa, bunun ne anlama geldiğini anlamak için muhtemelen Google FMTONLY + OPENQUERY olmalıdır.

+1

Nope'da gayet iyi çalışıyor, bu işe yaramadı –

12

Bu benim için çalıştı,

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

Ben geçici tablolar oluşturma, ve ben erişim İşte

ben değil bir sp oluşturmak fazla bilgi http://www.sommarskog.se/share_data.html#OPENQUERY

+0

+1 bu benim için de çalıştı. Teşekkürler! Geçici tablolar kullanmıyordum, ancak bu değişkenin bir SELECT deyiminden ayarlandığı uzak procda EXEC (@VariableWithQuery) yapıyordum. Ben "SET AYARI KAPALI" ekledikçe çalışmadı! başlangıca. Ancak, bir SET komutu ile değişkeni ayarladıysam, SET FMTONLY'e gerek duymadan çalıştım. Garip. –

+0

Teşekkürler!Bu benim için de çalıştı! :) – Erick

+0

Bu yanıtta tartışıldığı gibi, bu yönteme yönelik potansiyel olarak istenmeyen sonuçlar doğduğuna dair adil uyarı: https://stackoverflow.com/a/14299989; Ancak, "çalışmasını sağlamak" ve DTC ile uğraşmaktan kaçınmanın en kolay yolu budur, ki bu muhtemelen daha da kötüdür, bu yüzden bu ("AYARLANABİLİR SET") adil bir çalışma ortamıdır. – NateJ

2

olduğunu inkar var bu yüzden herhangi bir değer döndür ve işe yaramıyor. Mysql'deki SP'niz bir değer döndürmek zorunda! Örneğin ben "mysql" bunu:

"İd" ve "Ad" giriş parametresi ve "Sonuç" dir O
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 

çıkış parametresi ve SQL SERVER bağlantılı sunucu oluşturmak ve bunun gibi diyoruz:

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

bana uyar: D

İlgili konular