PDA

View Full Version : نحوه استفاده از FormatFile در دستور Bulk insert



مهدی رحیم زاده
یک شنبه 07 اسفند 1390, 10:53 صبح
با سلام خدمت تمامی دوستان عزیز
من یک سری فایل تکست دارم که توی اونا یک سری داده توی ستون های مختلفی قرار دارن
مثلا 20 کاراکتر اول مربوط به فیلد اول ، 3 تای بعدی فیلد بعد و به همین ترتیب
جالا میخوام که اینا رو ببرم توی بانک اطلاعاتی برای همین میخوام از دستور Bulk insert استفاده کنم
اگر کسی در مورد FormatFile و نحوه کار اون برام یک توضیح مختصر بده ممنون میشم
با تشکر

tiphooo
دوشنبه 08 اسفند 1390, 03:00 صبح
BULK INSERT YourTableNmae FROM 'YorFileName.txt' WITH ( FIELDTERMINATOR ='جدا کننده فیلد', OWTERMINATOR =' جدا کننده سطر' )در
YourTableNameنام جدولی که می خواهید اطلاعات در آن درج شود
YourFileName نام فایل متنی شما (فیلدهای شما در فایل متنی باید جدا کننده داشته باشند معمولا بیشتر از کاما (,) استفاده می شود)
جداکننده فیلد به دلخواه خودتان است
جدا کننده سطر که معمولا n\ می باشد که کارکتر Enter یا NewLine می باشد

مهدی رحیم زاده
دوشنبه 08 اسفند 1390, 08:05 صبح
BULK INSERT YourTableNmae FROM 'YorFileName.txt' WITH ( FIELDTERMINATOR ='جدا کننده فیلد', OWTERMINATOR =' جدا کننده سطر' )در
YourTableNameنام جدولی که می خواهید اطلاعات در آن درج شود
YourFileName نام فایل متنی شما (فیلدهای شما در فایل متنی باید جدا کننده داشته باشند معمولا بیشتر از کاما (,) استفاده می شود)
جداکننده فیلد به دلخواه خودتان است
جدا کننده سطر که معمولا n\ می باشد که کارکتر Enter یا NewLine می باشد
با سلام
ممنون بابت پاسخی که دادید
درسته این مورد رو بنده هم میدونم اما سوال من اینه که اگر حالا این فایل جدا کننده خاصی نداشت و مثلا فیلد اول 20 کاراکتر اول رو همیشه پر میکنه
فیلد دوم 3 تا
فیلد سوم 10 تا
بعد این سه تا فیلد رو چطور میشه توی بانک درج کرد. تا اونجایی که من میدونم راهش استفاده از FormatFile هست
با تشکر

Galawij
دوشنبه 08 اسفند 1390, 09:34 صبح
سلام،
درسته از طریق FormatFile قابل حل شدن هست. من یه سرچ هایی کردم به نتایج جالبی رسیدم ولی نمی رسم بیشتر روش کار کنم:
اول باید FormatFile را بر طبق جدولی که می خواید داده ها را واردش کنید، درست کنید. این کار از طریق دستور BCP انجام می شه و این دستور را با پارامترهاش در قسمت Windows Command Prompt وارد می کنید، خودش فایل فرمت را در مسیری که بهش می دید، درست می کنه. مثلاً:
bcp dbb.dbo.TableForBulkInsert format nul -f d:\myTestFormatFiles.Fmt -n -Tاین جا (http://msdn.microsoft.com/en-us/library/ms178129.aspx) در این مورد بیشتر توضیح داده.
بعد از طریق Query، اجراش می کنید:
Declare @SourceFilePath varchar(50)
Declare @FormatFilePath varchar(50)
Declare @RowNumber int
Set @SourceFilePath='D:\DataFile.txt'
Set @FormatFilePath='D:\myTestFormatFiles.Fmt'
set @RowNumber=1

SET ANSI_WARNINGS OFF
DECLARE @str_command nvarchar(150)
SET @str_command = 'BULK INSERT TableForBulkInsert FROM ''' + @SourceFilePath
+ ''' WITH (formatfile = ''' + @FormatFilePath + ''', firstrow =' + cast(@RowNumber as nvarchar) + ')'
EXEC SP_EXECUTESQL @str_commandباید روی فایل فرمت بیشتر کار کنید، با Notepad باز می شه (مخصوصاً با قسمت Collation اش).
این لینک (http://www.developerfusion.com/code/5357/bulk-insert-from-flat-file-using-transactsql/) هم ساختار فرمت فایل را توضیح داده.

tiphooo
دوشنبه 08 اسفند 1390, 16:25 عصر
ساده ترین راه به نظر من این است که جدولی که ساختید یک فیلد به فیلدهای آن اضافه کرده (از نوع nvarchar )
و کل سطر را در این فیلد بریزید و با update کردن جدول تفکیکات لازم را انجام دهید و در فیلدهای دیگر بریزید
اگر حتما الزام دارید کارتا انجام شود ساده ترین راه است و جواب می گیرید و اگر اصرار ندارید با همان روش خودتان انجام دهید.
Update YourTable
SET Filed1=Substring(Field4,1,20),
Field2=substring(Field4,21,3),
Field3=Substring(Field4,25,10)