حرکت کرسر روی خروجی یک استورپروسیجر
سلام
من یه sp دارم که با توجه به شروطی ، اطلاعاتی رو با دستور select برمیگردونه. یعنی در هر شرط از یه دستور select استفاده کردم.
حالا از داخل یه sp دیگه sp قبلی رو فراخوانی میکنم. و میخوام با کرسر روی تک تک سطرها برم و شرطی رو تست کنم و اطلاعات یه فیلد رو در بیارم.
sp1
select * from test
در حالت معمول کرسر رو اینطوری مینویسن
DECLARE MyCursor CURSOR SCROLL FOR
select ....
حالا اگه بخوام اینطور بنویسم که صد در صد اشتباهه !چه باید کرد؟
DECLARE BrouseProductsCursor CURSOR SCROLL FOR
exec sp1
نقل قول: حرکت کرسر روی خروجی یک استورپوسیجر
یک راهش این است که sp رو تبدیل به function table کنی و خیلی راحت می توانید در دستور select مانند یک جدول با ان برخورد کنید
را دوم این است که خروجی sp را در یک temp table بریزید و در دستور select از temp table استفاده کنی
البته به نظر من راه اول خیلی کارا تر و بهینه تر است
نقل قول: حرکت کرسر روی خروجی یک استورپوسیجر
ممنون.
منظورتون از Function table همون تابع های اسکیواله؟
اگه امکانش هست یه مثال لطف کنید.
نقل قول: حرکت کرسر روی خروجی یک استورپوسیجر
create Function [dbo].[test1] (@id int)
Returns Table
as
Return
Select * FROM Tablename
WHERE [id] = @id
بعد می تونی به شکل زیر ازش استفاده کنی
SELECT * FROM [dbo].[test1](4)
نقل قول: حرکت کرسر روی خروجی یک استورپوسیجر
در Function table بعد از Return باید بلافاصله دستور Select نوشته بشه. حالا اگه بخواهیم در صورت برقرار بودن شرطی یا عدم برقراری اون دستور select رو بنویسیم آیا باز هم می شه از Function table استفاده کرد؟
بعنوان مثال :
If @code=1 select * from test1
else select * from test2
نقل قول: حرکت کرسر روی خروجی یک استورپوسیجر
Create FUNCTION test2 (@ID INTEGER)
RETURNS @table TABLE
(
field1 int
)
as
BEGIN
INSERT INTO @table
SELECT id FROM tableName
RETURN
END
خوب شما اینجا مجبور هستین ساختار جدول خروجی را تعریف کنید که چه فیلد ها و چه نوعی داشته باشند
و سپس ان را به توجه به نیازتان پر کنید
نقل قول: حرکت کرسر روی خروجی یک استورپوسیجر
فرض کنید من این دستورات رو دارم و میخوام f1,f2,f3 در table قرار بگیرند .
DECLARE @f1 tinyint,f2 int,@f3 nvarchar(200)
SELECT @f1=f1,@f2=f2 FROM tbl1 WHERE f4=5 AND f5=1
EXEC sp_sample @f1,@f2,@f3 out
نحوه نوشتن این فانکشن به چه صورته؟