PDA

View Full Version : حذف تمام استور پروسیجرهای یک بانک



mohammadjp
چهارشنبه 19 آبان 1389, 16:31 عصر
چطور میتوان تمام استور پروسیجرهای یک بانک را با یک دستور حذف کرد به عبارت دیگر استور پروسیجرهای سیستمی مربوط به بانک حذف نشود

Reza_Yarahmadi
چهارشنبه 19 آبان 1389, 16:50 عصر
با دستوري مثل دستور زير ميتونيد اين كار رو انجام بديد

Declare @Str varchar(max)
Set @Str = (select Name + ',' from Sys.Objects Where Type = 'P' For Xml Path(''))
Set @Str = Substring(@Str, 1, Len(@Str) - 1)
Set @Str = 'Drop Proc ' + @Str
EXEC (@Str)

mohammadjp
چهارشنبه 19 آبان 1389, 17:00 عصر
مرسی دوست عزیز ولی با اینکار همه استور پروسیجرهای سیستمی مثل موارد زیر هم حذف میشوند . به عبارت دیگر من میخواهم استور پروسیجرهای خودم حذف شوند
sp_helpdiagrams,sp_helpdiagramdefinition,sp_create diagram,...

Reza_Yarahmadi
چهارشنبه 19 آبان 1389, 21:23 عصر
دوست عزیز این یک نمونه بود با یک مقدار تغییر میتونید به هدفتون برسید.
راه حل: اسم تمام SPهای سیستمی با sp شروع میشه شما میتونید شروع نام SPهای خودتون رو فرضا با usp شروع کنید و توی شرط نامها رو مقایسه کنید چیزی مثل کد زیر

Select
Name + ','
From
Sys.Objects
Where
Type = 'P'
AND
Left(Name, 2) <> 'sp'
For Xml Path('')
و یا اینکه با توجه با تاریخ ساخت SP این کار رو انجام بدید چیزی شبیه کد زیر (این برای SQL Server 2005 نوشته شده)

Select
Name + ','
From
Sys.procedures
Where
Create_Date > '2005-07-01 19:00:00:000'
For Xml Path('')

mohammadjp
پنج شنبه 20 آبان 1389, 10:51 صبح
آیا تابعی صددرصد مطمئن برای این جداسازی وجود ندارد زیرا بعضی از نامهای من و سیستم مشابه است و به تاریخ هم اطمینان ندارم چون تاریخ سیستم مشتری ممکن است صحیح نباشد
مثلا استور پروسیجر زیر با SP_ سروع نمیشود
dt_addtosourcecontrol

mohammadjp
پنج شنبه 20 آبان 1389, 17:56 عصر
بالاخره پس از صرف یک روز از عمر گرانبها با ترفند زیر موفق شدم استور پروسیجرهای خودم را حذف کنم


declare @qry nvarchar(max);
select @qry = (select 'drop proc '+ O.name + ';'
from
sys.procedures O
WHERE
ISNULL(O.is_ms_shipped, 0) = 0
and
(
select
major_id
from
sys.extended_properties
where
major_id = O.object_id and
minor_id = 0 and
class = 1 and
name = N'microsoft_database_tools_support'
) is null
For Xml Path('')
);
exec sp_executesql @qry