PDA

View Full Version : تغیر متغییر در تعداذ زیادی از پروسیجرها



ma.andishe
دوشنبه 03 مرداد 1390, 09:42 صبح
یا سلام وخسته نباشید خدمت دوستان عزیز
از دوستان اگه کسی هست که بدونه چطور میشه در یک دیتا بیسی که تعداد زیادی پروسیجر هست بخواهیم متغیری که مثلا نوع ان تاریخ 6 کارکتری هست رو به تاریخ 8 کارکتری تبدیل کنیم به عبارتی نخواهیم بشنیم تک تک پروسیجر هارو بگردیم و این تغییرو بدیم.ممنون میشم راهنمایی کنید

Galawij
دوشنبه 03 مرداد 1390, 11:34 صبح
سلام
فقط جهت راهنمایی:
Sql به دو حالت نوع داده هایی که کاربر برای فیلدها و پارامتر ها و دیگر اجزاء بانک اطلاعاتی تعریف می کند، را نگهداری می کند. یکی به صورت نوع داده که فرقی نمی کند شما اگر (nvarchar(255 و یا (nvarchar(2 را تعریف کنید، هر دو را با مقدار 231 برای نوع داده nvarchar می شناسد. ولی خصوصیت دیگری به نام length را برای میزان تعداد کاراکترهای که کاربر برای فیلدها در نظر گرفته نگهداری می کند. که شما باید این خصوصیت را که در جدول syscolumns قرار دارد دستکاری کنید. البته نمی دونم آپدیت روی جداول سیستمی جواب می دهد یا نه؟ امتحان کنید.
این دستور را اجرا کنید متوجه منظورم می شوید.

select sysobjects.Name,syscolumns.length,syscolumns.name ,systypes.xtype,systypes.Name
from sysobjects,syscolumns,systypes
where syscolumns.id=sysobjects.id and sysobjects.xtype='P' and syscolumns.xtype=systypes.xtype

یوسف زالی
دوشنبه 03 مرداد 1390, 17:18 عصر
سلام.
شما می تونی از Information_Schema.Routines نام و تعریف پروسیجر ها رو بریزی در یک جدول .
حالا یک حلقه یا کرسر روش بگذار و در اون (Replace شده Create Procedure با Alter Procedure و همچنین Char(6) با Char(8)) رو Exec کن!
:لبخند:
خودم خیلی حال کردم با پیشنهادم!

Galawij
سه شنبه 04 مرداد 1390, 10:11 صبح
این دستور را
Information_Schema.Routinesتوضیح می دهید.

یوسف زالی
سه شنبه 04 مرداد 1390, 11:01 صبح
این دستور نیست. یک ویو سیستمی هست که تعاریف SP و Func ها در اون وجود داره (چون ویو هست فقط می شه سلکتش کرد).
در ویو های دیتابیس وارد قسمت ویو های سیستمی شوید.
ویو های مشابه دیگه ای هم وجود دارند:
Information_Schema.Tables مثلا.

Galawij
سه شنبه 04 مرداد 1390, 11:33 صبح
خوب حالا چطوری روی این View ، دستور Update و یا Replace انجام می دهیم؟

یوسف زالی
سه شنبه 04 مرداد 1390, 12:00 عصر
عرض کردم.
ببینید فکر کنم با این مثال متوجه بشید:
72965

Galawij
چهارشنبه 05 مرداد 1390, 12:38 عصر
روش جالبی بود. مرسی
فقط یک تغییر کوچک داشت.

Declare @x varchar(500)
selecttop 1 @x=Replace(replace(ROUTINE_DEFINITION,'CREATE PROCEDURE','ALTER PROCEDURE'),'Char(6)','Char(8)')
fromINFORMATION_SCHEMA.ROUTINES
Where ROUTINE_TYPE='PROCEDURE'
exec(@x)

m_omrani
جمعه 07 مرداد 1390, 18:15 عصر
من در این جور مواقع با استفاده از Generate Script، اسکریپت SP هایی رو که می خوام دستکاری کنم تولید می کنم، بعد توش Search & Replace انجام می دم و بعد EXECUTE!

یوسف زالی
جمعه 07 مرداد 1390, 18:27 عصر
گاهی لازمه با دستورات این کار انجام شه.
اگر روی سیستم خودمون بودیم درست بود.

m_omrani
یک شنبه 09 مرداد 1390, 09:22 صبح
عجب. یعنی شما تا به حال به یک دیتابیس remote لاگین نکردید؟

یوسف زالی
یک شنبه 09 مرداد 1390, 13:51 عصر
عجب!
یعنی شما تا به حال از طریق فایل برای برنامه تون اصلاحیه با اسکریپت نفرستادید؟