سؤال

أريد أن استيراد عمود واحد ملف نصي في أحد جداول sql.الملف هو مجرد قائمة من الكلمات البذيئة.

لقد كتبت التالية tsql ضمن للقيام بذلك

BULK INSERT SwearWords
FROM 'c:\swears.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)

ومع ذلك فإنه الأخطاء مع unexapected نهاية الملف.الجدول im المستوردة إلى مجرد حقل الهوية تليها nvarchar الحقل الذي كنت ترغب في إدراج النص إلى.أنه يعمل بشكل جيد إذا قمت بإضافة في ملف نصي "1" إلى بداية eveyr الخط ، أفترض أن هذا هو لأن SQL إذا كنت تبحث عن 2 المجالات.هل هناك أي طريقة للتغلب على هذا ؟

شكرا

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

المحلول

تحتاج إلى استخدام FORMATFILE هذا.انظر إدراج مجمع.

FORMATFILE [ = 'format_file_path' ]

تحديد المسار الكامل من شكل الملف.تنسيق ملف توضح البيانات ملف يحتوي على تخزين الردود التي تم إنشاؤها باستخدام الأداة المساعدة bcp على نفس الجدول أو طريقة العرض.تنسيق الملف ينبغي أن تستخدم في الحالات التي:

* The data file contains greater or fewer columns than the table or view.

* The columns are in a different order.

* The column delimiters vary.

* There are other changes in the data format. Format files are usually created by using the bcp utility and modified with a text editor as needed. For more information, see bcp Utility.

للحصول على مزيد من المعلومات التفصيلية ، انظر باستخدام تنسيق الملفات.

نصائح أخرى

وهذا هو وصف في الكتب على الانترنت لINSERT BULK تحت حجة KEEPIDENTITY. هنا هو ما تقول

<اقتباس فقرة>   

وKEEPIDENTITY   تنص على أن القيم لعمود الهوية موجودة في الملف المستوردة. إذا لم يتم إعطاء KEEPIDENTITY، يتم تجاهل القيم هوية لهذا العمود في ملف البيانات المستوردة، و SQL Server بتعيين القيم فريدة من نوعها تقوم على قيم البذور وزيادة المحدد أثناء إنشاء الجدول تلقائيا. إذا لم يتضمن ملف البيانات القيم للعمود الهوية في جدول أو طريقة عرض، استخدم ملف تنسيق لتحديد أن عمود الهوية في جدول أو طريقة عرض يجب أن يتم تخطي عند استيراد البيانات؛ SQL خادم يعين قيم فريدة تلقائيا للعمود

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

وبالإضافة إلى ذلك، يمكنك إنشاء طريقة عرض على الجدول الخاص بك على أساس مجرد عمود NVARCHAR، ثم INSERT BULK في وجهة نظركم. هذا هو وسيلة نظيفة جدا استخدام BULK INSERT.

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

وبيان INSERT BULK يجب أن تبدو مثل هذا:

BULK INSERT vw_SwearWords FROM 'c:\swearwords.txt' WITH (ROWTERMINATOR = '\n')

وتحتاج إلى التأكد من أن هيكل ملف نصي والمباراة الجدول - إذا كان الجدول يحتوي على حقلين، ثم سيكون لديك لتوفير حقلين / الأعمدة في ملف نصي، وكذلك

.

ومنذ العمود الأول في الجدول SQL هو حقل الهوية، يمكنك تقديم أي القيمة التي تريدها - ولكن عليك أن تكون قيمة هناك، وأنا لا أعتقد أن هناك أي طريقة للتغلب على هذه

ومارك

وتحقق السطر الأخير ديه CR / LF (\ ص \ ن). في بعض الأحيان أن يكون مشكلة، في بعض الأحيان الأخرى لإرجاع اضافية هي في نهاية الملف. يمكنك التحقق من ذلك مع hexeditor.

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

في SQL سيرفر 2008 لقد وجدت أنه من الأسهل لمجرد خلق ملف يحتوي على الكثير من إدراج مثل ذلك، ولصق ذلك في إطار الاستعلام Studio إدارة، بدلا من قتال مع الحصول على شكل ملف وأذونات الملف إدراج السائبة فقط الحق :

USE YourDB
GO
INSERT INTO MyTable (FirstCol, SecondCol)
VALUES ('First',1),
('Second',2),
('Third',3),
('Fourth',4),
('Fifth',5)

<وأ href = "http://blog.sqlauthority.com/2008/07/02/sql-server-2008-insert-multiple-records-using-one-insert-statement-use-of-row- منشئ / "يختلط =" نوفولو "> http://blog.sqlauthority.com/2008/07/02/sql-server-2008-insert-multiple-records-using-one-insert-statement-use-of-row -constructor /

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