حدد الاستعلام على جدولين، على خوادم قاعدة بيانات مختلفة

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

سؤال

أحاول إنشاء تقرير عن طريق الاستعلام عن قاعدتي بيانات (Sybase) في ASP الكلاسيكي.

لقد قمت بإنشاء سلسلتي اتصال:

connA لقاعدة البياناتA
connB لقاعدة البياناتB

كلتا قاعدتي البيانات موجودتان على نفس الخادم (لا أعرف ما إذا كان هذا مهمًا)

الاستعلامات:

q1 = SELECT column1 INTO #temp FROM databaseA..table1 WHERE xyz="A"

q2 = SELECT columnA,columnB,...,columnZ FROM table2 a #temp b WHERE b.column1=a.columnB

تليها:

response.Write(rstsql) <br>
set rstSQL = CreateObject("ADODB.Recordset")<br>
rstSQL.Open q1, connA<br>
rstSQL.Open q2, connB

عندما أحاول فتح هذه الصفحة في المتصفح، تظهر لي رسالة الخطأ:

خطأ موفر Microsoft OLE DB لبرامج تشغيل ODBC "80040e37"

[DataDirect] [برنامج تشغيل ODBC Sybase Wire Protocol] [SQL Server] #temp لم يتم العثور عليه.حدد Owner.objectname أو استخدم sp_help للتحقق من وجود الكائن (قد تنتج sp_help الكثير من المخرجات).

هل يمكن لأي شخص مساعدتي في فهم المشكلة ومساعدتي في حلها؟

شكرًا.

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

المحلول

مع كلا الاستعلامين، يبدو أنك تحاول الإدراج في #temp.#temp موجود في إحدى قواعد البيانات (من أجل الوسائط، قاعدة البيانات أ).لذلك عند محاولة الإدراج في #temp من قاعدة البياناتB، فإنه يُبلغ عن عدم وجوده.

حاول تغييره من داخل #درجة حرارة من ل داخل قاعدة البياناتA.dbo.#temp من في كلا البيانين.

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

تحديث:فيما يتعلق بالجدول المؤقت الذي يخرج عن النطاق - إذا كان لديك سلسلة اتصال واحدة لها أذونات على قاعدتي البيانات، فيمكنك استخدام هذا لكلا الاستعلامين (مع الحفاظ على الاتصال حيًا).أثناء الاستعلام عن الجدول في قاعدة البيانات الأخرى، تأكد من استخدام تنسيق [DBName].[Owner].[TableName] عند الإشارة إلى الجدول.

نصائح أخرى

جدول مؤقت الخاص بك خارج نطاقه ، إنه "حي" فقط خلال الاتصال الأول ولن يكون متاحًا في الاتصال الثاني ، فقط نقل كل ذلك في كتلة واحدة من التعليمات البرمجية وتنفيذها داخل Conchection

درجة الحرارة خارج النطاق في Q2.

يمكن إنجاز جميع أعمالك باستعلام واحد:


SELECT a.columnA, a.columnB,..., a.columnZ
FROM table2 a
INNER JOIN (SELECT databaseA..table1.column1 
            FROM databaseA..table1
            WHERE databaseA..table1.xyz = 'A') b
  ON a.columnB = b.column1
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top