السلام عليكم يا إخواني الكرام سأحاول أن أعمل مثال حول تصدير البيانات من جدول إلى ملف نصي باستخدام T-SQL.. ولكن هناك أمر يجب أن يعرفه قارئ المثال ..
و هو أنني سأتعامل مع المؤشرات في المثال التالي و المؤشرات قد يطول شرحها شوي و لكن سأحاول الإجابة على الأسئلة حول المثال و توضيح ما قد يصعب فهمه إن شاء الله .. ;)
ليكن لدينا جدول Employee_TB جدول الموظفين على سبيل المثال .
وفيه حقلين الإسم و الرقم ___________ Name , Id حيث حقل الـ Id من نوع Int عدد صحيح .
Create Table Employee_TB(Id Int , Name Nvarchar(50))
ندخل بعض القيم فيه للتجربة( من أجل المثال ) .
Insert Into Employee_TB Values(1 , 'Ahmad') Insert Into Employee_TB Values(12 , 'imad') Insert Into Employee_TB Values(123 , 'saleh') Insert Into Employee_TB Values(1234 , 'muhammad')
أولاً : إليك الدالة التالية : سيتوضح عملها عند الإختبار ..
Create Function Number_With_Fixed_Length( @Number Nvarchar(255) , -- The number you want fit @length TinyInt ) Returns Nvarchar(255) Begin if(@length <= len(LTrim(RTrim(@Number))) ) Return @Number -- ending the function and return the number as string -- because its length is suitable Declare @freq Int , @Text Nvarchar(255) Set @Text = @Number Set @freq = @length - len(@Text) -- len Returns the length of number -- Ex: 2 length of 21 Declare @i int , @Zeros Nvarchar(4) Select @i =0 , @Zeros = '' while @i < @freq Begin Set @Zeros = @Zeros + '0' Set @i = @i + 1 End Set @Text = @Zeros + @Text Return @Text End
-------------------- إختبار
print dbo.Number_With_Fixed_Length('12',5)ثانياً : إجرائية الإضافة للملف النصي :
CREATE PROCEDURE sp_AppendToFile(@FileName varchar(255), @Text1 varchar(255)) AS DECLARE @FS int, @OLEResult int, @FileID int -- (.. مثلاً IO) للتعامل مع ملفات خارجية Stream إنشاء كائن شبيه بالـ -- @FS سوف تعيد مقبض للتعامل مع المجرى وهو هنا Sp_OACreate طبعاً الدالة EXECUTE @OLEResult = sp_OACreate 'Scripting.FileSystemObject', @FS OUT IF @OLEResult <> 0 PRINT 'Scripting.FileSystemObject' -- sp_OAMethod -- "هده كـ "إفتح الملف Stream سنستخدم الدالة هده لإرسال أمر معين للـ -- @FileID مع العملية "فتح ملف" ستعيد مقبض لاستخدامه في الكتابة داخل الملف كما سنرى sp_OAMethod أيضاً الدالة execute @OLEResult = sp_OAMethod @FS, 'OpenTextFile', @FileID OUT, @FileName, 8, 1 IF @OLEResult <> 0 PRINT 'OpenTextFile' --Write Text1 execute @OLEResult = sp_OAMethod @FileID, 'WriteLine', Null, @Text1 IF @OLEResult <> 0 PRINT 'WriteLine' -- و لتدمير المجرى sp_OADestroy استخدام الكائن لإغلاق الملف المفتوح EXECUTE @OLEResult = sp_OADestroy @FileID EXECUTE @OLEResult = sp_OADestroy @FS
ثالثاً: تصدير الجدول Employee_TB إلى الملف المحدد في الإجرائية التالية : C:\T.Txt
Create Proc Export_Employee_Table AS Declare @id Nvarchar(50) , @Name Nvarchar(50) -- to put the value into -- them comming from The cursor Declare @Columns Nvarchar(1000) -- to combine the columns in a variable Declare C Cursor For Select dbo.Number_With_Fixed_Length(Cast(id As Nvarchar(255)),4) , Name From Employee_TB Open C Fetch Next From C Into @id , @name -- fetch values from the record into variables While @@Fetch_Status = 0 Begin Set @Columns = @id + ',' + @Name -- Like : 0025,Ahmad Exec sp_AppendToFile @FileName = 'C:\T.Txt' , @Text1 = @Columns -- Calling the procedure sp_AppendToFile to insert the values Fetch Next From C Into @id , @name End Close C DeAllocate C Go
----------------------- إختبار
Export_Employee_Table