PDA

View Full Version : سوال: ایجاد یک تابع در یک SP?



SYNDROME
سه شنبه 24 دی 1387, 07:30 صبح
با سلام
من یک SP نوشته ام و در چند جای SP از یک کد بخصوص استفاده کرده ام.(مثلا به دست آوردن Max فیلد ID)
می خواستم بدانم آیا می توان داخل SP یک تابع نوشته که با فرا خوانی آن چنین عملی انجام شود.
یعنی مقدار فوق حساب شود و داخل یک متغیر ریخته شود و سپس ادامه آن قسمت اجرا شود.
نمی خواهم از تابع های داخل قسمت Function استفاده کنم و می خواهم داخل خود SP چنین تابع یا Procedure بنویسم.
آیا چنین کاری را می توان در SP انجام دهم؟چطور؟
با تشکر از دوستان

amin_alexi
سه شنبه 24 دی 1387, 08:01 صبح
سلام
اگه منظورتون رو درست متوجه شده باشم !
منظورتون نوشتن یک تابع توسط خودتون مثلا مثل این

Use Northwind
GO
CREATE FUNCTION dbo.FN_Max()
RETURNS int
AS
BEGIN
DECLARE @Max int
Set @Max=( Select Max(OrderID) as Max1 From dbo.Orders )
RETURN(@Max)
END
و در یک Procedure به این صورت استفاده بشه

Create Procedure SP_Tst
as
Begin
INSERT INTO [Northwind].[dbo].[Orders]([OrderID], [CustomerID])
VALUES(dbo.FN_Max()+1, 'A1')
End
این جوری میشه !
ولی اگه مثلا مثل Delphi بخواین داخل یک Procedure بتونین یک تابع بنویسین که کد تابع در داخل خود Procedure باشه این رو فکر نمی کنم بشه !
مگر اینکه یک رشته تعریف کنید و با این روش انجام به طور غیر مستقیم !!

Create Procedure Sp_tstP
As
Begin
Declare @Query nvarchar(400)
Set @Query=
'CREATE FUNCTION dbo.FN_Max1()
RETURNS int
AS
BEGIN
DECLARE @Max int
Set @Max=( Select Max(OrderID) as Max1 From dbo.Orders )
RETURN(@Max)
END'
EXEC(@Query)
End

ar.shirazi
سه شنبه 24 دی 1387, 12:26 عصر
ولی اگه مثلا مثل Delphi بخواین داخل یک Procedure بتونین یک تابع بنویسین که کد تابع در داخل خود Procedure باشه این رو فکر نمی کنم بشه !


کاملا درست فکر میکنید :)