ورود

View Full Version : ساخت یک پروسیجر داخل پروسیجر دیگر



saeed_zarei1847
پنج شنبه 07 دی 1391, 18:11 عصر
با سلام خدمت دوستان.
بنده میخواهم یک پروسیجر را در داخل پروسیجر دیگر اجرا کنم اولین پروسیجر اجرا میشود ولی پروسیجر دومی اجرا نمیشود. لطفا من را راهنمایی کنید.
ضمنا کد T-SQL را قرار داده ام.



CREATE
DATABASE TESTDB

GO

CREATE
TABLE TEST

(

ID INT IDENTITY PRIMARY KEY,

FNAME VARCHAR(50),

LNAME VARCHAR (50)

)

GO

CREATE
PROC USP_CRE_USP_INS

AS

BEGIN

DECLARE @RESULT VARCHAR(500)

SET @RESULT=

'CREATE PROC USP_INS_TEST

@FNAME VARCHAR(50),

@LNAME VARCHAR(50)

AS

BEGIN

INSERT TEST(FNAME,LNAME)

VALUES (@FNAME,@LNAME)

END '

EXEC @RESULT '123','123'

END

mohsen24000
پنج شنبه 07 دی 1391, 18:14 عصر
خب معلومه! تا وقتی که پروسیجر اول رو اجرا نکنی، دومی ساخته نمیشه.:چشمک:

saeed_zarei1847
پنج شنبه 07 دی 1391, 19:07 عصر
البته حرف شما کاملا صحیح است ولی هنگام اجرای پروسیجر اول با خطای زیر مواجه میشوم.

'Msg 203, Level 16, State 2, Procedure USP_CRE_USP_INS, Line 14
The name 'CREATE PROC USP_INS_TEST
@FNAME VARCHAR(50),
@LNAME VARCHAR(50)
AS
BEGIN
INSERT TEST(FNAME,LNAME)
VALUES (@FNAME,@LNAME)
END ' is not a valid identifier.
'

ferdin
پنج شنبه 07 دی 1391, 22:33 عصر
سلام

دوست عزیز شما اول باید sp دومتون رو ایجاد کنید ٰ بعد تو sp اول اونو exec کنید با پارامتر های ورودی که می خاین.


exec sp_test 21 ,21

saeed_zarei1847
پنج شنبه 07 دی 1391, 23:49 عصر
خوب من هم همین کار رو کردم

saeed_zarei1847
جمعه 08 دی 1391, 01:36 صبح
دمت گرم.تازه حرفت رو متوجه شدم. حالا چه جوری پروسیجر دوم را داخل پروسیجر اول بسازم

saeed_zarei1847
جمعه 08 دی 1391, 01:37 صبح
دمت گرم.تازه حرفت رو متوجه شدم. حالا چه جوری پروسیجر دوم را داخل پروسیجر اول بسازم؟

ferdin
جمعه 08 دی 1391, 10:41 صبح
ببین نمی تونی یک sp رو داخل یک sp دیگه هر دفعه ایجاد کنی گر اینکه آخر sp اول بعد از اینکه کارت تموم شد اونو drop کنی یا قبل از ایجاد چک کنی ببینی این sp وجود داره یا نه اگه وجود داشت drop کنی دوباره ایجادش کنی یا چون وجود داره دیگه ایجادش نکی. به هر حال نمی دونم چرا می خوای یک sp رو توی یک sp دیگه ایجاد کنی اما برا ایجادش همون کاری که خودت کردی اونو به صورت string توی یک متغیر از نوع nvarchar بنویس بعد اون متغیرو exec کن. کد زیرو ببین.



create Proc spMain

As

Begin

if Not exists(Select * from sys.objects
where object_id = OBJECT_ID(N'spTest')
And type = N'P'
)

Begin
declare @Str as nvarchar(500)

Set @Str = '
Create procedure spTest
@a int ,@b int
As

Begin
Select @a ,@b
End
'
exec (@Str)
End
exec spTest 12 , 12

End


exec spMain