PDA

View Full Version : ایجاد SP های تو در تو



bpzone
یک شنبه 19 اردیبهشت 1389, 15:11 عصر
با سلام به همگی دوستان
امکان ایجاد SP های تو در تو وجود داره ؟

به فرض مثال من یک SP دارم که کد یک استان رو می گیره و ایدکس اون استان رو بر می گردونه



set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER PROCEDURE [dbo].[SP_FindIndexState] ( @StateName nvarchar(50) )
AS
SELECT _Index
FROM State
WHERE Name = @StateName

حالا می خوام یک SP بنویسم که تمام شهر های استان مورد نظر رو برگردونه


set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER PROCEDURE [dbo].[SP_FindAllCityInStauteWithName] ( @State nvarchar(50) )
AS
SELECT Name
FROM City
WHERE State_Index = EXECUTE SP_FindIndexState @StateName = @State

اما با خطا رو برو شدم


Msg 156, Level 15, State 1, Procedure SP_FindAllCityInStauteWithName, Line 7
Incorrect syntax near the keyword 'EXECUTE'.
آیا راهی برای این کار هست یا اصلاً این امکان وجود نداره :متفکر:

محمد سلیم آبادی
یک شنبه 19 اردیبهشت 1389, 17:57 عصر
در این مورد نیاز به این کارها نیست.
چرا از این کوئری استفاده نمی کنید:


SELECT Name
FROM City
WHERE State_Index IN (SELECT _index FROM state WHERE name = @state)

bpzone
یک شنبه 19 اردیبهشت 1389, 18:22 عصر
از این کوئری استفاده کردم
این مثال رو برای درک منظورم برای دوستان نوشتم
در کل می خوام ببینم امکان استفاده از SP ها بصورت تو در تو وجود داره یا خیر ؟

محمد سلیم آبادی
یک شنبه 19 اردیبهشت 1389, 18:49 عصر
مثال خوبی طرح نکردین.
بله امکان صدا زدن sp ها به شکل تو در تو وجود داره که به این بحث گفته میشه nesting stored procedure

bpzone
یک شنبه 19 اردیبهشت 1389, 19:58 عصر
مثال خوبی طرح نکردین.
بله امکان صدا زدن sp ها به شکل تو در تو وجود داره که به این بحث گفته میشه nesting stored procedure

امکانش هست با یک مثال راهنمایی کنید ؟
ممنون میشم :بوس:

محمد سلیم آبادی
دوشنبه 20 اردیبهشت 1389, 04:15 صبح
nesting sp مثل هرچیز تودرتوی دیگه هست به این مثال توجه کنید:

CREATE PROC proc1 AS SELECT 1 AS i
GO

CREATE PROC proc2 AS EXECUTE proc1
GO

CREATE PROC proc3 AS EXECUTE proc2
GO

EXECUTE proc3


همانطور که مشاهده می کنید پروسیجرها به شکل تو درتو همدیگر را call میکنند.
که در آخر با اجرای پروسیجر سوم یک سطر با مقدار 1 نمایش داده میشه

bpzone
دوشنبه 20 اردیبهشت 1389, 08:11 صبح
دوست عزیز، با تشکر از شما

فرض کنید که من یک SP دارم که اسم یک شهر رو میگیره و یک عدد متناظر با اون رو از جدول استخراج می کنه

حالا من یک SP دیگه دارم که عدد متناظر با یک شهر رو میگیره و یک سری اطلاعات بر می گردونه
عدد مورد نیاز این SP همون عددی هست که SP اولی بدست میاره ...
حالا من چجوری میتونم عددی رو که SP اول بر می گردونه در یک کوئری در داخل SP دوم استفاده کنم :افسرده:

محمد سلیم آبادی
دوشنبه 20 اردیبهشت 1389, 08:20 صبح
در عبارت SELECT امکان استفاده از دستور EXECUTE نیست. بجاش می تونید از تابع scalar استفاده کنید