PDA

View Full Version : مقدار برگشتی فیلد درstoreProcedure؟؟؟



h.alizadeh
جمعه 27 مهر 1386, 07:17 صبح
سلام،

من توی بانکم دوتا جدول دارم

خب می خوام با کلیک بر روی یک دکمه در فرم ام: 1) یک رکورد به جدول اولیم اضافه شود. خب این جدول اولیم یک فیلد داره که خودکار پر میشه بنام "شماره نامه"
خب من می خوام بعد از اینکه با store procedure رکوردی به جدول اولیم اضافه شد شماره نامه ی اون رکورد رو بدست بیارم و
2)یک رکورد به جدول دومی ام اضافه کنم که یک فیلدش شماره نامه هست همین شماره نامه ی رکوردی که به جدول اولی اضافه شد.

چطوری می تونم مقدار فیلد شماره نامه ی جدول اولی رو بدست بیارم؟؟

(بدون سرچ ؛ چون هیچ فیلدی بجز شماره نامه منحصر بفرد نیست+ اینکه یکی از فیلدهام هم نوعشtext هست که نمیدونم چجوری مقایسه کنم)

AminSobati
جمعه 27 مهر 1386, 11:22 صبح
اگر فیلد شما Identity هستش، از تابع SCOPE_IDENTITY بلافاصله بعد از Insert استفاده کنین

h.alizadeh
یک شنبه 29 مهر 1386, 21:45 عصر
اگر فیلد شما Identity هستش، از تابع SCOPE_IDENTITY بلافاصله بعد از Insert استفاده کنین

بله فیلد من از نوع identifyهست،
اما این تابعی که شما گفتید رو نمیشناسم میشه طرز استفاده از این تابع رو بگید (با مثال)

h.alizadeh
یک شنبه 29 مهر 1386, 21:47 عصر
بله فیلد من از نوع identifyهست

saeed.samiee
دوشنبه 30 مهر 1386, 16:07 عصر
سلام دوست عزیز میتوانید مقدار متغیر IDENTITY@@ را بلا فاصله بعد از دستور Insert (در تیبل identify ) در یک متغیر دیگر ذخیره کنید این متغیر مقدار فیلد identity ی تیبل را برمیگرداند و در آخر SP بنویسید (متغیر) return
و در برنامه خودتان مقدار RETURN_VALUE@ را دریافت کنید(دلفی)
موفق باشید

h.alizadeh
چهارشنبه 02 آبان 1386, 20:06 عصر
سلام،
ممنون
یک نگاه به کدم بندازید ببینید درست متوجه شدم.
من یک فیلد lidدارم که از نوع bigintهست و identityهم کردم و خودکار فیلدش مقدار میگیره حالا می خوام بعد از اضافه کردن مقدار lid رو برام برگردونه اما خطا میگیره


CREATE procedure writeInteraLetter2
(
@matter char( 60 ),
@createdate char( 10 ),
@foriyat char(10),
@matn text

)
As
declare letter_id bigint
If Exists( SELECT * FROM letters
WHERE lmatter=@matter and lcreatedate=@createdate and lforiyat=@foriyat and lmatn like @matn)
RETURN -1
ELSE
INSERT letters (
lmatter,
lcreatedate,
lforiyat,
lmatn
)
VALUES (
@matter,
@createdate,
@foriyat,
@matn
)
letter_id=@@lid
return letter_id

GO

MohammadSoft
پنج شنبه 03 آبان 1386, 00:01 صبح
سلام
اولا که کدی که گذاشتید که مطمئنا اجرا نخواهد شد ،
اولا شما از @@Identity یا SCOPE_IDENTITY استفاده نکردید ،از کجا ای دی رکورد جدید رو به دست میارید ؟
تو دستور انتساب از SET استفاده نکردید .
برای برگرداندن یک مقدار در sql به 2 روش می تونید انجام بدید :
1 - پارامتر OUTPUT : یک پارامتر را از نوع OUTPUT اعلام کنید و پس از اجزای پروسجر مقدارش رو بخونید ،البته در بدنه پروسجر باید آنرا مقدار دهی کنید .
2 - RETURNVALUE : با استفاده از دستور Return ،که در این حالت برای استفاده از آن باید اجرای پروسجر خود را برابر با یک متغیر بگذارید یعنی اجرای پروسجر مقداری را برمیگردونه .

h.alizadeh
پنج شنبه 03 آبان 1386, 15:32 عصر
سلام
مرسی جواب گرفتم
درست شد

فقط یک سؤال:چجوری می تونم این storeProcedure رو از توی query Analyzerاجرا کنم؟؟؟
من رویه رو از توی asp.netاجرا کردم جواب داد ...
حالا دوست دارم بدونم چجوری از توی کوئری میتونم رویه رو اجرا و آزمایش کنم تا راحتتر باشم؟؟؟
این کد رویه ام اگه میشه با کد نوشتن راهنمایی م کنید
تشکر

CREATE procedure writeInteraLetter2
(
@matter char( 60 ),
@createdate char( 10 ),
@foriyat char(10),
@matn text

)
As
DECLARE @foundUser bigint
If Exists( SELECT * FROM letters
WHERE lmatter=@matter and lcreatedate=@createdate and lforiyat=@foriyat and lmatn like @matn)
RETURN -1
ELSE
INSERT letters (
lmatter,
lcreatedate,
lforiyat,
lmatn
)
VALUES (
@matter,
@createdate,
@foriyat,
@matn
)
set @foundUser=@@Identity
return @foundUser
GO

MohammadSoft
جمعه 04 آبان 1386, 14:34 عصر
سلام
این دستورات را اجرا کنید :
DECLARE @Return INT
SET @Retun = EXEC EXEC writeInteraLetter2 'Master' ,'1386/.2/12' ,'12' ,'Text'
SELECT @Return

h.alizadeh
جمعه 04 آبان 1386, 21:37 عصر
مرسی، ممنون

ولی این پیام خطا رو داد:

Server: Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'EXEC'.

MohammadSoft
شنبه 05 آبان 1386, 12:37 عصر
سلام
اشتباه از من بود ، ببخش ;)
DECLARE @Return INT
EXEC @Retun = writeInteraLetter2 'Master' ,'1386/.2/12' ,'12' ,'Text'
SELECT @Return