PDA

View Full Version : مشکل با خروجی sp



hamid_m6070
پنج شنبه 26 بهمن 1391, 13:37 عصر
سلام
یک sp نوشتم ساده مقادیر رو می فرستم در db ذخیر می کنه ولی خروجی که باید بده نمی ده یا مقدار نمی ده (identity@@)
البته قبل این که موضوع رو بیان کنم از دیروز دارم سر کلاه می زنم و سایت ها رو هم چک کردم
یک چیزه ساده من گذشته سر کار

باتشکر



alter proc sp_insert
@id int,
@name nvarchar(50),
@family nvarchar(50),
@IDentityValues int = -1 output
as
set nocount on
insert into tb_profile (id,Name,Family)values(@id,@name,@family)
select @IDentityValues = SCOPE_IDENTITY()
if @@ERROR=0 and @@ROWCOUNT=1
Begin

set @IDentityValues=@@IDENTITY
return @IDentityValues
End
else
begin

set @IDentityValues=-1
return @IDentityValues
end

محمد سلیم آبادی
پنج شنبه 26 بهمن 1391, 18:10 عصر
چرا متغیر id را یک بار با تابع Scope مقدار دهی کردین و یک بار با متغیر identity ؟
شما توسط ماده output بسادگی می توانید id درج شده در جدول را بدست بیاورید.
به این کد توجه کنید:
alter proc sp_insert
@id int,
@name nvarchar(50),
@family nvarchar(50)
as
insert into tb_profile (id,Name,Family)
output inserted.id
values(@id,@name,@family);

hamid_m6070
پنج شنبه 26 بهمن 1391, 21:48 عصر
سلام
ممنون از کد که گذاشتید

output inserted.id
ولی فکر کنم فقط این کد در همان وسط insert کاربرد دارد مقادیر id را بر می گرداند می خواهم با کد IDentity ها کار کنم و مثالکه در بالا زدم به همان روش جواب بده
و برگشت اطلاعات که خودم می فرستم رو یاد بگیرم اگر می شود کمی راجب برگشت (return) مقادیر از sp توضیح بدهید
مثال بزنید
باز هم از شما متشکرم

محمد سلیم آبادی
جمعه 27 بهمن 1391, 00:55 صبح
دوست عزیز، لطفا سوالتون را در تالار ADO مطرح کنید.

hamid_m6070
جمعه 27 بهمن 1391, 09:59 صبح
خیلی ممنون از شما بابت راهنمایی حذف کردم تاپیک رو .
لطف کنید در مورد تایپیک شماره 3 هم مرا راهنمایی کنید .

محمد سلیم آبادی
جمعه 27 بهمن 1391, 12:24 عصر
سلام
ممنون از کد که گذاشتید

ولی فکر کنم فقط این کد در همان وسط insert کاربرد دارد مقادیر id را بر می گرداند می خواهم با کد IDentity ها کار کنم و مثالکه در بالا زدم به همان روش جواب بده
و برگشت اطلاعات که خودم می فرستم رو یاد بگیرم اگر می شود کمی راجب برگشت (return) مقادیر از sp توضیح بدهید
مثال بزنید
باز هم از شما متشکرم
به مثال زیر توجه کنید. قصد داریم مقدار متغیری را که در بدنه پروسیجر مقداردهی کردم را هنگام اجرای پروسیجر بدست بیاریم.
در این مثال طریقه گرفتن مقدار output را نشان دادم:
alter proc proc_test
@id int output
as
declare @t table(i int)
insert into @t output inserted.i values(65)
set @id = 65
go

declare @out int
execute proc_test @id = @out output
select @out

hamid_m6070
جمعه 27 بهمن 1391, 12:51 عصر
(declare @t table(i int

(insert into @t output inserted.i values(65

این دو خط رو توضیح می دهید متوجه کد نمی شم (table که نوشتید ) و (insert.i)
این مطلب رو هم متوجه شدم که هر وقت یک متغیر output تعریف می کنیم و مقداری رو درون آن قرار می دهیم می تواینم مقدار رو در خروجی استفاده کنیم و از return استفاده نکنیم
حال چه وقت از return استفاده می کنیم

محمد سلیم آبادی
جمعه 27 بهمن 1391, 15:47 عصر
اون دو خط مربوط به تعریف یک متغیر جدولی و درج مقدار 65 در آن است.
عموما از return به منظور کد پیغام خطای صادر شده استفاده می کنند.
در ادامه مثالی آوردم که نشان میده چطور به مقداری که در return بر گشت خورده دست پیدا کنیم...
alter proc proc_test
@id int output
as
declare @t table(i int)
insert into @t output inserted.i values(65)
set @id = 650
return @@ERROR
go

declare @out int, @return_value int;

execute @return_value = proc_test @id = @out output

select @out, @return_value

hamid_m6070
یک شنبه 29 بهمن 1391, 13:45 عصر
سلام
می خواستم راجب این کد هم من کمک کنید (IDENTITY@@) و (()SCOPE_IDITITY) هر چی در داخل کد استفاده می کنم جواب (Null) می دهد باید مقداری فعال کنم یا کار دیگری انجام بدم
البته از روش بالا که گفتید کامل یاد گرفتم خیلی ممنون از دوست عزیزم msalim .

البته نگاهی به سایت دیگه انداختم همه همین کد استفاده کردند و یا مقدار رو داخل یک متغیر ریختن ولی با هر کدوم استفاده کردم جواب نداد.


alter proc sp_test
as
insert into tb (id,name,family)values(72,'c','a')
SELECT SCOPE_IDENTITY()


البته این کد رو هم امتحان کردم هیچ مقداری رو چاپ می کند مقدار ((1 row(s) affected)) به من نمایش می دهد و در ادامه هیچی نمایش نمی دهد
البته از sql 2008 استفاده می کنم


Declare @id int

insert into tb (id,name,family)values(486,'c','a')
Set @id= @@identity

print @id

Reza_Yarahmadi
یک شنبه 29 بهمن 1391, 13:58 عصر
دوست عزیز بجای اینکه فقط به سوال کردن بسنده کنید ، خودتون یک مقدار درباره موارد مطرح شده جستجو کنید (قبلا توی همین سایت کامل توضیح داده شده)