sql-server - امثلة - شرح sql




ما هي أفضل طريقة لإنشاء عبارات INSERT تلقائيًا لجدول SQL Server؟ (13)

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

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

في كثير من الأحيان ، نريد "تحديث" الجداول ذات الصلة ، مما يعني إسقاطها جميعًا ، وإعادة إنشائها ، وتشغيل استعلام إلحاق محفوظ لـ MS Access.

الجزء الأول (إسقاط وإعادة إنشاء) هو برنامج نصي سهل sql ، ولكن الجزء الأخير يجعلني تذلل. أريد برنامجًا نصيًا واحدًا للإعداد يحتوي على مجموعة من INSERTs لإعادة إنشاء البيانات الوهمية.

لدي البيانات في الجداول الآن. ما أفضل طريقة لإنشاء قائمة كبيرة من عبارات INSERT من مجموعة البيانات هذه تلقائيًا؟

أفكر في شيء مثل TOAD (في Oracle) حيث يمكنك النقر بزر الماوس الأيمن فوق شبكة وانقر فوق حفظ As-> Insert Statements ، وسيقوم فقط بتفريغ برنامج نصي sql كبير أينما تريد.

الطريقة الوحيدة التي يمكنني التفكير بها في القيام بها هي حفظ الجدول في ورقة إكسل ثم كتابة صيغة إكسل لإنشاء INSERT لكل صف ، وهو بالتأكيد ليس أفضل طريقة.

أنا باستخدام Studio إدارة 2008 للاتصال بقاعدة بيانات SQL Server 2005.


أول رابط لـ sp_generate_inserts رائع جدًا ، إليك إصدار بسيط حقًا:

DECLARE @Fields VARCHAR(max); SET @Fields = '[QueueName], [iSort]' -- your fields, keep []
DECLARE @Table  VARCHAR(max); SET @Table  = 'Queues'               -- your table

DECLARE @SQL    VARCHAR(max)
SET @SQL = 'DECLARE @S VARCHAR(MAX)
SELECT @S = ISNULL(@S + '' UNION '', ''INSERT INTO ' + @Table + '(' + @Fields + ')'') + CHAR(13) + CHAR(10) + 
 ''SELECT '' + ' + REPLACE(REPLACE(REPLACE(@Fields, ',', ' + '', '' + '), '[', ''''''''' + CAST('),']',' AS VARCHAR(max)) + ''''''''') +' FROM ' + @Table + '
PRINT @S'

EXEC (@SQL)

في نظامي ، أحصل على هذه النتيجة:

INSERT INTO Queues([QueueName], [iSort])
SELECT 'WD: Auto Capture', '10' UNION 
SELECT 'Car/Lar', '11' UNION 
SELECT 'Scan Line', '21' UNION 
SELECT 'OCR', '22' UNION 
SELECT 'Dynamic Template', '23' UNION 
SELECT 'Fix MICR', '41' UNION 
SELECT 'Fix MICR (Supervisor)', '42' UNION 
SELECT 'Foreign MICR', '43' UNION 
...

إذا كنت تحتاج إلى وصول برمجي ، فيمكنك استخدام إجراء تخزين مفتوح المصدر `GenerateInsert.

INSERT البيان (ق) المولد

كمثال بسيط وسريع ، لإنشاء عبارات INSERT لجدول تنفيذ AdventureWorks.Person.AddressType العبارات التالية:

USE [AdventureWorks];
GO
EXECUTE dbo.GenerateInsert @ObjectName = N'Person.AddressType';

سيؤدي هذا إلى إنشاء البرنامج النصي التالي:

SET NOCOUNT ON
SET IDENTITY_INSERT Person.AddressType ON
INSERT INTO Person.AddressType
([AddressTypeID],[Name],[rowguid],[ModifiedDate])
VALUES
 (1,N'Billing','B84F78B1-4EFE-4A0E-8CB7-70E9F112F886',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(2,N'Home','41BC2FF6-F0FC-475F-8EB9-CEC0805AA0F2',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(3,N'Main Office','8EEEC28C-07A2-4FB9-AD0A-42D4A0BBC575',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(4,N'Primary','24CB3088-4345-47C4-86C5-17B535133D1E',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(5,N'Shipping','B29DA3F8-19A3-47DA-9DAA-15C84F4A83A5',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(6,N'Archive','A67F238A-5BA2-444B-966C-0467ED9C427F',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
SET IDENTITY_INSERT Person.AddressType OFF


لا تستخدم إدراج ، استخدم BCP


لست متأكدًا ، إذا فهمت سؤالك بشكل صحيح.

إذا كان لديك بيانات في MS-Access ، والتي تريد نقلها إلى SQL Server - يمكنك استخدام DTS.
وأعتقد أنه يمكنك استخدام برنامج التعريف SQL لترى كل عبارات INSERT التي تمر بها ، أفترض.


لقد بحثت في الكثير حول هذا الموضوع ، لكني لم أستطع الحصول على الحل الملموس لهذا. حاليًا ، النهج الذي أتبعه هو نسخ المحتويات في excel من استوديو إدارة SQL Server ثم استيراد البيانات إلى Oracle-TOAD ثم إنشاء عبارات الإدراج


لماذا لا تقوم فقط بنسخ البيانات احتياطيًا قبل عملك ، ثم استعادتها عندما تريد تحديثها؟

إذا كنت بحاجة إلى إنشاء إدخالات ، فجرّب: http://vyaskn.tripod.com/code.htm#inserts


نحن نستخدم هذا الإجراء المخزن - فهو يسمح لك باستهداف جداول محددة ، واستخدامها في مكان الجمل. يمكنك العثور على النص here .

على سبيل المثال ، يتيح لك القيام بذلك: لإنشاء عبارات INSERT لجدول "العناوين":

EXEC sp_generate_inserts 'titles'

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

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


يمكن القيام بذلك باستخدام Visual Studio أيضًا (على الأقل في إصدار 2013 فصاعدًا).

في VS 2013 من الممكن أيضًا تصفية قائمة الصفوف التي تستند إليها عبارة الإدخال ، وهذا شيء غير ممكن في SSMS كما أعرف.

قم بالخطوات التالية:

  • فتح إطار "SQL Server Object Explorer" (القائمة: / View / SQL Server Object Explorer)
  • افتح / توسيع قاعدة البيانات وجداولها
  • انقر بزر الماوس الأيمن على الجدول واختر "عرض البيانات" من قائمة السياق
  • هذا سوف يعرض البيانات في المجال الرئيسي
  • خطوة اختيارية: انقر على رمز التصفية "فرز وتصفية مجموعة البيانات" (الرمز الرابع من اليسار في الصف أعلى النتيجة) وتطبيق بعض الفلاتر على عمود واحد أو أكثر
  • انقر على أيقونة "Script" أو "Script to File" (أيقونات على يمين الصف العلوي ، تبدو كأنها أوراق صغيرة من الورق)

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


الأزرار "تصفية" و "البرنامج النصي" Visual Studio 2013 :


يمكنك استخدام حزمة أدوات SSMS (متوفرة لـ SQL Server 2005 و 2008). لأنه يأتي مع ميزة لتوليد بيانات إدراج.

http://www.ssmstoolspack.com/


GenerateData هي أداة مذهلة لهذا الغرض. من السهل جدًا إجراء تعديلات عليه نظرًا لأن شفرة المصدر متاحة لك. بعض الميزات الرائعة:

  • اسم مولد لأسماء الناس والأماكن
  • القدرة على حفظ الملف الشخصي للجيل (بعد تنزيله وإعداده محليًا)
  • القدرة على تخصيص والتلاعب في جيل من خلال النصوص
  • العديد من المخرجات المختلفة (CSV ، Javascript ، JSON ، إلخ) للبيانات (في حالة ما إذا كنت بحاجة إلى اختبار المجموعة في بيئات مختلفة وترغب في تخطي الوصول إلى قاعدة البيانات)
  • مجاني . ولكن النظر في التبرع إذا وجدت البرنامج مفيدة :).





code-generation