تنفيذ الأجهزة الخادمة iSeries DB2 إجراء مخزن من خادم SQL 2005 مرتبط

StackOverflow https://stackoverflow.com/questions/329051

سؤال

واني اسعى الى تنفيذ المخزنة procedured من قاعدة بيانات مرتبطة في MS SQL 2005. وقاعدة البيانات المرتبطة هي قاعدة بيانات DB2 في الخادم الأجهزة الخادمة iSeries. أنا باستخدام موفر خدمة الأجهزة الخادمة iSeries IBMDASQL. وأنا قادرة على الاستعلام الإجراء المخزن دون مشاكل باستخدام فبسكريبت بسيطة واللغط. عندما أحاول تنفيذ نفس الإجراء المخزن في محلل الاستعلام على SQL Server و أنا لا أرى أي نتائج. محلل الاستعلام تظهر دائما 'قيادة تنفيذها "، وعندما تنفيذ حدد * على جدول مؤقت، تظهر أية قيم. ما الخطأ الذي افعله؟؟؟؟؟ شكرا!

- رمز من محلل الاستعلام أدناه -

DECLARE @emailToAddress         char(50)
DECLARE @emailFromAddress       char(50)

set @emailToAddress = 'customer.service@company.com'
set @emailFromAddress = 'customer@gmail.com'

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

ومحدث: هنا هو رمز تحديث لاستخدام OPENQUERY ... الحظ لا يوجد حتى: (

وVARCHAR DECLARETSQL (8000) نعلنemailToAddress VARCHAR (50) نعلنemailFromAddress VARCHAR (50) SETemailToAddress = 'customer.service@company.com " SETemailFromAddress = 'customer@gmail.com " SETTSQL = "SELECT * FROM OPENQUERY (MAM400، '' CALL abicqual.VP_GETCCEPGMID ( '' '' '+emailToAddress +' '' ''، '' '' '+emailFromAddress +' '' '' '+ ')' '' + ')' طباعةTSQL EXEC (TSQL)

و- الناتج below-- SELECT * FROM OPENQUERY (MAM400، "CALL abicqual.VP_GETCCEPGMID ( '' customer.service@company.com ''، '' customer@gmail.com '') ') جي اس 7357، مستوى 16، حالة 2، خط 1 لا يمكن معالجة الكائن "CALL abicqual.VP_GETCCEPGMID ('customer.service@company.com '،' customer@gmail.com ')". موفر OLE DB "IBMDASQL" ل "MAM400" ملقم مرتبط يشير إلى أن أي كائن ليس له أعمدة أو المستخدم الحالي ليس لديه الأذونات على ذلك الكائن.

هل كانت مفيدة؟

المحلول

وتبين أن هناك عددا من القضايا مع مقدم IBMDASQL ان كنت تستخدم. صدقوا أو لا تصدقوا أنه أسرع وأكثر موثوقية لاستخدام موفر Microsoft OLE DB لبرامج تشغيل ODBC. بعد إنشاء ملقم جديد مرتبط مع هذا الموفر كل من بلدي محاولات SQL السابقة عملت بشكل صحيح. هتاف!

نصائح أخرى

وأنا باستخدام موفر Microsoft DB2OLEDB الذي يتوفر كجزء من حزمة ميزات لSQL 2005 - أبريل 2006. كما انها جزء من خدمات تكامل المضيف. ذلك هوكس الى AS / 400 باستخدام بروتوكول (نمط أوراكل) DRDA.

ويمكنك تحميل البرنامج على حدة ولكن سيتم تثبيت فقط على SQL القياسية، المؤسسة أو المطور (لا اكسبرس).

وأجد أيضا أن بناء الاستعلام الكامل الذي أريد أن تعمل على DB2 / 400 مربع ثم يلف في سلسلة VARCHAR (MAX) التي تضم أيضا "SELECT * FROM OPENQUERY (--linkedservername -، - -DB2 / 400 الاستعلام مع params--) "ثم استخدام sp_execute أو EXEC الأوامر يعود على أفضل النتائج.

وحتى انه من الممكن ان يختتم كود RPG ضمن الإجراءات SQL DB2 / 400 ومن ثم الاتصال بهم (التي تحتوي على معاملات) من MS SQL Server و إرجاع أي مجموعة النتائج كجدول MS SQL.

OPENQUERY . <وأ href = "http://blogs.conchango.com/jamespipe/archive/2007/06/28/SQL-Server-2005_3A00_-Passing-variables-into-an-OPENQUERY-argument.aspx" يختلط = "نوفولو noreferrer "> هذا بلوق نشر يظهر مثال تمرير المتغيرات في عبارة OPENQUERY.

وإجراء مكالمة أوراكل (وظيفة) عبر ملقم مرتبط والحصول على نتيجة (قيمة الإرجاع) في

--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

والحل هو إضافة أقواس حول بيان المكالمة. كنت لا تزال لن تكون قادرا على تحديد في جدول في نهاية SQL خادم الرغم إلا إذا كنت قد قمت بتثبيت دعم المعاملات الموزعة. أنا لست متأكدا من السبب في انها تحتاج الى الصفقة، لكنها لن تنجح إلا إذا كان لديك وضع هذا الأمر.

وEXEC ( '{CALL abicqual.VP_GETCCEPGMID (؟،؟)}'،emailToAddress،emailFromAddress) AT MAM400

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top