PDA

View Full Version : سوال: stored procedures



jafar_mirzaie
پنج شنبه 03 مرداد 1387, 20:14 عصر
یه sp لازم دارم که :چند تا فیلد رو به DB sql server )به غیر از مثلا ID( وارد و ID همون سطر وارد شده رو برگردونه؟ممنون میشم اگه راهنمایی کنید.

AminSobati
جمعه 04 مرداد 1387, 11:13 صبح
اگر چند رکورد با اون مشخصات وجود داشته باشه چی؟

jafar_mirzaie
جمعه 04 مرداد 1387, 12:06 عصر
مثل اینکه بد توزیح دادم
ID ی همون سطری که وارد میکنیم و ID به صورت IDENTIY هست.

AminSobati
جمعه 04 مرداد 1387, 16:05 عصر
شما میخواین Identity رو پاس بدین به SP و رکورد دریافت کنین؟ کمی بیشتر توضیح بدین

jafar_mirzaie
جمعه 04 مرداد 1387, 18:25 عصر
نه یه SP که چند تا داده رو تو data Base
INSERT میکنه البته به غیر از فیلد ID که IDENTIY تعریف کردم یعنی:



ALTER PROCEDURE dbo.addEmp
@fName nvarchar(20), @lName nvarchar(30), @SHshenasname nvarchar(10),
@birthDate char(10), @estekhtamDate char(10), @noEstekhtam nvarchar(20),
@paypaye int, @mojarad nvarchar(4), @hogog bigint,
@yearPadash int, @eydi int, @hageOlda int, @hageKhar int, @ezafeKar int,
@nobateKar smallint, @monPadash int,
@hageMamoriyat int, @porsant int
/*
(
@parameter1 int = 5,
@parameter2 datatype OUTPUT
)
*/
AS
begin tran
INSERT INTO emp
(fName, lName, SHshenasname, birthDate, estekhtamDate, noEstekhtam, paypaye, mojarad, hogog, yearPadash, eydi, hageOlda, hageKhar, ezafeKar,
nobateKar, monPadash, hageMamoriyat, porsant)
VALUES (@fName, @lName, @SHshenasname, @birthDate, @estekhtamDate, @noEstekhtam, @paypaye, @mojarad, @hogog, @yearPadash, @eydi, @hageOlda, @hageKhar, @ezafeKar,
@nobateKar, @monPadash, @hageMamoriyat, @porsant)/*SET NOCOUNT ON */
commit tran

RETURN
__________________________________________________ _______________________________
در اخر هم فیلد ID ی insert شده رو پس بده(SELECT نه)

jafar_mirzaie
جمعه 04 مرداد 1387, 19:35 عصر
با تشکر از اونایی که جواب دادن و ندادن حل شد(kono kapandi)


جوابش هم :
ALTER PROCEDURE dbo.addEmp
@fName nvarchar(20), @lName nvarchar(30), @SHshenasname nvarchar(10),
@birthDate char(10), @estekhtamDate char(10), @noEstekhtam nvarchar(20),
@paypaye int, @mojarad nvarchar(4), @hogog bigint,
@yearPadash int, @eydi int, @hageOlda int, @hageKhar int, @ezafeKar int,
@nobateKar smallint, @monPadash int,
@hageMamoriyat int, @porsant int
/*
(
@parameter1 int = 5,
@parameter2 datatype OUTPUT
)
*/
AS
begin tran
INSERT INTO emp
(fName, lName, SHshenasname, birthDate, estekhtamDate, noEstekhtam, paypaye, mojarad, hogog, yearPadash, eydi, hageOlda, hageKhar, ezafeKar,
nobateKar, monPadash, hageMamoriyat, porsant)
VALUES (@fName, @lName, @SHshenasname, @birthDate, @estekhtamDate, @noEstekhtam, @paypaye, @mojarad, @hogog, @yearPadash, @eydi, @hageOlda, @hageKhar, @ezafeKar,
@nobateKar, @monPadash, @hageMamoriyat, @porsant)/*SET NOCOUNT ON */
commit tran SELECT ID
FROM emp
WHERE (lName = @lName) AND (fName = @fName)
RETURN

رضا جاسبی
جمعه 11 مرداد 1387, 03:41 صبح
نمی دونم واقعا حل شده یا نه. چون نفهمیدم که از اون ID که آخر نوشتی چطوری بیرون sp استفاده می کنی. اما این روش لزوما جواب درست بهت نمیده. چون ممکنه نام و نام خانوادگی تکراری داشته باشی. مگر اینکه فیلد unique داشته باشی که اون هم لزومی نداره در sp بخواهی استفاده کنی.
به هر حال راه درست اینه که یک متغیر @ID تعریف کنی و حتما نوعش رو OUTPUT تعریف کنی. بعد با دستور
()Set @Id = Scope_Identity مقداری که همین الان درج شده رو بگیری. می تونی Scope_Identity رو تو HELP خود SQL جستجو کنی