imadouzoun

Generate Sql Script For Pocedure

1 مشاركة في هذا الموضوع

السلام عليكم و رحمة الله :

من المعروف لدى مبرمجي T-Sql أن الإجرائيات المخزنة يخزن نصها في جدول النظام SysComments اللي قد يخزن نص الإجرائية في أكثر من سجل عندما تكون طويلة مثل :

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

خارجية (فيجوال ستوديو مثلاً) في مربع نص من سجل واحد ؟؟ 8-)

مسألة تحير .. قد يفكر البعض بعمل حلقة على سجلات نص الإجرائية و كتابتها في الأداة (مربع نص) ..

و السؤال لمادا نقوم بدلك و نحن نملك طريقة من لب الـSql Server تمكننا من جمع كم كبير من النص في حقل من نوع NText أو Text كما تحدثت في درس سابق ؟؟

إليك هده الإجرائية الظريفة قمت ببرمجتها و التي تقوم بوضع نص الإجرائية مهما كان عدد السجلات التي تشغلها في الجدول SysComments في سجل واحد فقط .. ;)

Proc [dbo].[Procedure_Text]
 @Proc_Name nvarchar(128)  = 'Procedure_Text' ,
 @DB        nvarchar(128)  = 'master'        ,
 @Drop_Temp_TB bit = 1

AS
if((select count(*) from tempdb..SysObjects where name = 'Proc_Text' and XType='U') > 0)
 DRop Table tempdb..Proc_Text
 
set @DB = RTrim(LTRim(@DB))
if(@DB <> '')
 set @DB = @DB + '..'

print @DB
exec
('
select '+ @DB +'syscomments.id,text ,name from '+ @DB +'syscomments
 Inner Join '+ @DB +'sysobjects ON '+ @DB +'syscomments.id = '+ @DB +'sysobjects.id
Where
 '+ @DB +'sysobjects.name = ''' + @proc_Name + '''
')


create Table #M(Txt nvarchar(4000))
Create Table tempdb..Proc_Text(TXT NText)

insert Into #M exec('select text from '+ @DB +'syscomments
 Inner Join '+ @DB +'sysobjects ON '+ @DB +'syscomments.id = '+ @DB +'sysobjects.id
Where '+ @DB +'sysobjects.name = ''' + @proc_Name + '''')
insert Into tempdb..Proc_Text(TXT) values('1')


Declare @Part nvarchar(4000),@i int , @Ptr VarBinary(32), @q nvarchar(2000)
Select @i = 0 , @q = '' , @Ptr = TextPtr(TXT) From tempdb..Proc_Text

declare C cursor For Select Txt from #M
open C
Fetch Next From C Into @Part
While @@Fetch_Status = 0
Begin  
  UpdateText tempdb..Proc_Text.TXT @Ptr  @i  0   @Part
  set @q = 'UpdateText tempdb..Proc_Text.TXT '

  Select @Ptr = TextPtr(TXT) From tempdb..Proc_Text
  print ('-----------' + Char(13)  + @q)
  print @Ptr
  print ' ' + cast(@i as nvarchar(5)) + ' 0 ' + Char(13) + '-----------'

  Set @i = @i + 4000
  print '---------------' + Char(13) + cast(@i as Nvarchar(5)) + Char(13) + '---------------' + Char(13)
  Fetch Next From C Into @Part
End
Close C
DeAllocate C

Select TXT From tempdb..Proc_Text
if(@Drop_Temp_TB = 1)
  Drop Table tempdb..Proc_Text

---------------------------------------------------

إختبار :

[Procedure_Text] 'sp_help'

أرجو تقييمها .. :rolleyes:

تم تعديل بواسطه imadouzoun
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .