PDA

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



unique1984
پنج شنبه 27 فروردین 1388, 00:23 صبح
سلام
من یه sp دارم که با توجه به شروطی ، اطلاعاتی رو با دستور select برمیگردونه. یعنی در هر شرط از یه دستور select استفاده کردم.
حالا از داخل یه sp دیگه sp قبلی رو فراخوانی میکنم. و میخوام با کرسر روی تک تک سطرها برم و شرطی رو تست کنم و اطلاعات یه فیلد رو در بیارم.

sp1

select * from test

در حالت معمول کرسر رو اینطوری مینویسن

DECLARE MyCursor CURSOR SCROLL FOR
select ....
حالا اگه بخوام اینطور بنویسم که صد در صد اشتباهه !چه باید کرد؟

DECLARE BrouseProductsCursor CURSOR SCROLL FOR
exec sp1

reza_Nazem
پنج شنبه 27 فروردین 1388, 09:05 صبح
یک راهش این است که sp رو تبدیل به function table کنی و خیلی راحت می توانید در دستور select مانند یک جدول با ان برخورد کنید

را دوم این است که خروجی sp را در یک temp table بریزید و در دستور select از temp table استفاده کنی

البته به نظر من راه اول خیلی کارا تر و بهینه تر است

unique1984
پنج شنبه 27 فروردین 1388, 13:58 عصر
ممنون.
منظورتون از Function table همون تابع های اسکیواله؟
اگه امکانش هست یه مثال لطف کنید.

reza_Nazem
جمعه 28 فروردین 1388, 00:22 صبح
create Function [dbo].[test1] (@id int)
Returns Table
as
Return
Select * FROM Tablename
WHERE [id] = @id


بعد می تونی به شکل زیر ازش استفاده کنی

SELECT * FROM [dbo].[test1](4)

unique1984
شنبه 29 فروردین 1388, 14:23 عصر
در Function table بعد از Return باید بلافاصله دستور Select نوشته بشه. حالا اگه بخواهیم در صورت برقرار بودن شرطی یا عدم برقراری اون دستور select رو بنویسیم آیا باز هم می شه از Function table استفاده کرد؟
بعنوان مثال :

If @code=1 select * from test1
else select * from test2

reza_Nazem
یک شنبه 30 فروردین 1388, 00:08 صبح
Create FUNCTION test2 (@ID INTEGER)
RETURNS @table TABLE
(
field1 int
)
as
BEGIN
INSERT INTO @table
SELECT id FROM tableName
RETURN
END



خوب شما اینجا مجبور هستین ساختار جدول خروجی را تعریف کنید که چه فیلد ها و چه نوعی داشته باشند
و سپس ان را به توجه به نیازتان پر کنید

unique1984
شنبه 09 خرداد 1388, 13:32 عصر
فرض کنید من این دستورات رو دارم و میخوام 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
نحوه نوشتن این فانکشن به چه صورته؟