سؤال

لدي قاعدة بيانات تسمى FOO وقاعدة بيانات تسمى BAR. لدي جدول في FOO يسمى TBLFOOBAR الذي أريد نقله (البيانات وجميع) إلى شريط قاعدة البيانات من قاعدة البيانات FOO. ما هو بيان SQL للقيام بذلك؟

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

المحلول

على SQL Server؟ وعلى نفس خادم قاعدة البيانات؟ استخدام ثلاثة أجزاء التسمية.

INSERT INTO bar..tblFoobar( *fieldlist* )
SELECT *fieldlist* FROM foo..tblFoobar

هذا فقط ينقل البيانات. إذا كنت ترغب في نقل تعريف الجدول (وسمات أخرى مثل الأذونات والفهارس) ، فسيتعين عليك القيام بشيء آخر.

نصائح أخرى

ستؤدي مهمة "استيراد بيانات الاستيراد" الخاصة بـ SQL Server Management (النقر بزر الماوس الأيمن على اسم DB ، ثم المهام) إلى القيام بمعظم هذا من أجلك. قم بتشغيله من قاعدة البيانات التي تريد نسخ البيانات إليها.

إذا لم تكن الجداول موجودة ، فستقوم بإنشاءها لك ، ولكن من المحتمل أن تضطر إلى إعادة إنشاء أي فهارس وكذا. إذا كانت الجداول موجودة ، فسيتم إلحاق البيانات الجديدة بشكل افتراضي ولكن يمكنك ضبط ذلك (تحرير التعيينات) بحيث ستحذف جميع البيانات الموجودة.

أستخدم هذا طوال الوقت ويعمل بشكل جيد إلى حد ما.

هذا يجب أن يعمل:

SELECT * 
INTO DestinationDB..MyDestinationTable 
FROM SourceDB..MySourceTable 

فإنه سوف ليس نسخ القادمات ، الافتراضات أو الفهارس. الجدول الذي تم إنشاؤه ليس لديك فهرس مجموعات.

بدلاً من ذلك يمكنك:

INSERT INTO DestinationDB..MyDestinationTable 
SELECT * FROM SourceDB..MySourceTable

إذا كان جدول وجهتك موجودًا وفارغًا.

إذا كان جدول واحد فقط ، فكل ما عليك فعله هو

  • تعريف جدول النص
  • إنشاء جدول جديد في قاعدة بيانات أخرى
  • تحديث القواعد ، الفهارس ، الأذونات وما شابه
  • بيانات الاستيراد (عدة إدراج في أمثلة مبينة بالفعل أعلاه)

شيء واحد يجب أن تفكر فيه هو تحديثات أخرى مثل ترحيل الكائنات الأخرى في المستقبل. لاحظ أن جداول المصدر والوجهة الخاصة بك ليس لها نفس الاسم. هذا يعني أنه سيتعين عليك أيضًا إجراء تغييرات إذا كنت تعتمد على كائنات مثل طرق العرض والإجراءات المخزنة وغيرها.

وايت واحد أو عدة كائنات يمكنك الذهاب يدويًا مع أي مشاكل. ومع ذلك ، عندما يكون هناك أكثر من مجرد تحديثات ، تكون أدوات مقارنة الطرف الثالث مفيدًا للغاية. الآن أنا أستخدم Apexsql diff بالنسبة لترحيل المخطط ، لكن لا يمكنك أن تخطئ في أي أداة أخرى هناك.

  1. السيناريو create table في استوديو الإدارة ، قم بتشغيل هذا البرنامج النصي في شريط لإنشاء الجدول. (جدول النقر الأيمن في مستكشف الكائن ، جدول البرنامج النصي ، إنشاء إلى ...)

  2. INSERT bar.[schema].table SELECT * FROM foo.[schema].table

يمكنك أيضا استخدام قم بإنشاء معالج SQL Server Server للمساعدة في توجيه إنشاء نص SQL الذي يمكنه القيام بما يلي:

  • انسخ مخطط الجدول
  • أي قيود (الهوية ، القيم الافتراضية ، إلخ)
  • البيانات داخل الجدول
  • والعديد من الخيارات الأخرى إذا لزم الأمر

مثال جيد على سير العمل ل SQL Server 2008 مع عرض لقطات الشاشة هنا.

يمكنك الذهاب مع هذا الطريق: (مثال عام)

insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB)
Select columnA, columnB from DeveloperDB.dbo.Customers

أيضًا إذا كنت بحاجة إلى إنشاء أسماء الأعمدة أيضًا لوضعها في شرط إدراج ، فاستخدم:

    select (name + ',') as TableColumns from sys.columns 
where object_id = object_id('YourTableName')

انسخ النتيجة والصق في نافذة الاستعلام لتمثيل أسماء أعمدة الجدول الخاصة بك وحتى هذا سوف يستبعد عمود الهوية أيضًا:

    select (name + ',') as TableColumns from sys.columns 
where object_id = object_id('YourTableName') and is_identity = 0

تذكر أن البرنامج النصي لنسخ الصفوف سيعمل على أن قواعد البيانات تنتمي إلى نفس الموقع.


يمكنك تجربة هذا.

select * into <Destination_table> from <Servername>.<DatabaseName>.dbo.<sourceTable>

اسم الخادم اختياري إذا كان كلا DB في نفس الخادم.

إذا كان هناك جدول موجود ونريد نسخ البيانات فقط ، فيمكننا تجربة هذا الاستعلام.

أدخل في Destination_existing_tbl Select Col1 ، Col2 من Source_TBL

نسخ البيانات

INSERT INTO Alfestonline..url_details(url,[status],recycle) 
SELECT url,status,recycle FROM AlfestonlineOld..url_details
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top