PDA

View Full Version : نحوه انجام یک یا چند تا از اعمال اصلی در یک(Delete + select + update) (StoredProcedure)



majid_darab
جمعه 04 تیر 1389, 23:24 عصر
با سلام و عرض خسته نباشید و عید امشب بر تمامی دوستان مبارک و تهنیت باد :
امروز روی StoredProcedure ی کار می کردم که در ابتدا می بایست چند تا رکورد از یک جدول در دیتابیس پاک گردد و سپس چند تا select دارم که خروجی آنها به صورت count مربوط به تعداد رکوردهای نمایش داده شده می باشد و در نهایت این مقادیر Count باید به Insert پاس داده شوند...
با توجه به اینکه تعداد Select و Insert ها زیاد است می خواستم یک sp از همشون داشته باشم تا با یک بار اجرای sp کارهایی که می خوام انجام شوند...
با توجه به اینکه به sp عادت کردم اگر در این مورد مرا راهنمایی بفرمایید ممنون میشم....
مشکل اینجاست که فقط select ها اجرا می شوند و خبری از اجرا شدن insert نیست.
به طو مثال sp خلاصه شده به صورت زیر می باشد :



================================================== ========================================
-- Entity Name: sp_Chart_Insert
-- Author:
-- Create date: 25/06/2010 08:56:40 ق.ظ
-- Description: This stored procedure is intended for inserting values to Chart table
-- ================================================== ========================================
Create Procedure [dbo].[sp_Chart_InsertPusheshAges]
@Co_ID int,
@User_ID int,
@Value int,
@Name nchar(20)
As
Begin
SELECT TahtePooshesheBime.[Birth]
From TahtePooshesheBime

Where
CONVERT(CHAR(4),TahtePooshesheBime.[Birth],112) >CONVERT(CHAR(4),GETDATE(),112)-20
And
TahtePooshesheBime.GhateRabete=0
Declare @Count int
Select @Count = @@ROWCOUNT
Return @Count
End
Begin
Insert Into Chart
([Co_ID],[User_ID],[Value],[Name])
Values
(@Co_ID,@User_ID,@Count,'زیر 20 سال')

End

در sp بالا پارامترها رو هم حذف کرده و تست کردیم - اما فقط select اجرا می شود.


با تشکر

niloofar norouzi
شنبه 05 تیر 1389, 10:35 صبح
سلامبه نظر من مشکل اینجاست که دو بار begin,end نوشتیدیکی را حذف کنید و مقداری که قرار است return شود در انتها بنویسیدامیدوارم مشکلتون حل بشه

majid_darab
شنبه 05 تیر 1389, 13:00 عصر
سلام به نظر من مشکل اینجاست که دو بار begin,end نوشتیدیکی را حذف کنید و مقداری که قرار است return شود در انتها بنویسیدامیدوارم مشکلتون حل بشه


با سلام :
دلیل اجرا نشدن Return - Insert پس از select بود - امّا برداشتن Begin و End و جابجایی Return موثر نیفتاد...
به دلیل اینکه وقتی Retun رو می برم بعد Insert آن وقت Return تعداد رکوردهای Insert ر وبرمی گردونه که به درد ما نمی خوره !
واما کد نمونه :


ALTER Procedure [dbo].[3]
@Co_ID int
As
Begin
SELECT TahtePooshesheBime.[Birth]
From TahtePooshesheBime

Where
CONVERT(CHAR(4),TahtePooshesheBime.[Birth],112) >CONVERT(CHAR(4),GETDATE(),112)-20
And
TahtePooshesheBime.GhateRabete=0

Insert Into BankInfo
(Co_ID,Code)
Values
(23,'زیر 20 سال')

Declare @Count int
Select @Count = @@ROWCOUNT
Return @Count

Endبا تشکر از پاسخگویی

aghayex
یک شنبه 06 تیر 1389, 06:02 صبح
برای استفاده چند دستو در یکsp :




create Procedure up_insert

as

begin

begin transaction update
دستور آپدیت

begin transaction insert
دستور درج
commit tran update
commit tran insert
end

behrouzlo
یک شنبه 06 تیر 1389, 16:50 عصر
فكر كنم اينطوري جواب بده

ALTER Procedure [dbo].[3]
@Co_ID int
As
Begin
SELECT TahtePooshesheBime.[Birth]
From TahtePooshesheBime

Where
CONVERT(CHAR(4),TahtePooshesheBime.[Birth],112) >CONVERT(CHAR(4),GETDATE(),112)-20
And
TahtePooshesheBime.GhateRabete=0


Declare @Count int
Select @Count = @@ROWCOUNT

Insert Into BankInfo
(Co_ID,Code)
Values
(23,'زیر 20 سال')

Return @Count

End

majid_darab
جمعه 11 تیر 1389, 16:31 عصر
دست شما درد نکنه ... مدتی نبودم و خواستم از پاسخهایی که دادید تشکر کنم.
کد بالامؤثّر افتاد ...

با تشکر
مجید داراب