החלפת מחרוזת אחת באחרת בתוך קוד פרוצדורה

05/02/2011

אין תגובות

לשולחן המערכת הגיעה השאלה הבאה: יש צורך בסקריפט שיאפשר לתקן פרוצדורות כך שמחרוזת המופיעה בהן תוחלף באחרת.
למשל:

Create Proc MyProc As

Select    *

From    sys.objects

Where    name Like '%A%';

Go

פרוצדורה זו שולפת את כל האובייקטים שבשמם מופיעה האות A, ואנחנו רוצים שתשלוף את אלו שבשמם מופיעה האות B..

טוב, זו דוגמה קצת מטופשת, אבל נניח שבמציאות מדובר במשהו יותר מורכב, ונקבל כאקסיומה שהלקוח תמיד צודק ואם זה מה שהוא רוצה, מי אנו שנתווכח איתו? (טוב- אולי נתווכח בקטנה אבל משיעמוד על דעתו- נספק לו את מבוקשו)

קודם כל נשלח את תוכן הפרוצדורה לתוך טבלה זמנית בעזרת פרוצדורת המערכת SP_HelpText המציגה את הקוד של הפרוצדורה הנ"ל:

Create Table #MyTbl(I Int Identity,S Varchar(Max));

Go

 

Insert Into #MyTbl 

Exec SP_HelpText 'MyProc';

Go

כעת נכניס את קוד הפרוצדורה לתוך משתנה,

נשנה את Create Proc ל-Alter Proc (שינוי פרוצדורה קיימת),

את המחרוזת %A% נחליף ב-%B% (בזהירות- אם נשנה רק את A ל-B המילה השמורה As תהפוך ל-Bs ושם העמודה name ל-nBme..),

ונריץ את הקוד המתוקן:

 

Declare    @SQL Varchar(Max)

 

Select    @SQL=IsNull(@SQL,'')+S

From    #MyTbl

Order By I;

 

Set        @SQL=Replace(@SQL,'Create Proc','Alter Proc');

Set        @SQL=Replace(@SQL,'%A%','%B%');

 

Print @SQL;

Exec(@SQL);

Go

כעת צריך רק להריץ את הפרוצדורה MyProc או לעיין בקוד שלה בעזרת SP_HelpText כדי להשתכנע שהיא תוקנה.

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *