View Full Version : مقدار دهی به یک متغیر در stored procedure
quantomquery
جمعه 21 خرداد 1389, 08:40 صبح
سلام
من زیاد به sqlserver وارد نیستم
میخوام به مقدار بیشترین BG_num یکی اظافه کنم و موقع insert استفاده کنم ولی دستور زیر خطا میده :
اگه میشه راهنماییم کنید
ALTER PROCEDURE dbo.BG_insert
@BG_num int= SELECT MAX([BG_num]) + 1 FROM [BookGroup],
@BG_name nvarchar(30) OUTPUT
AS
INSERT INTO BookGroup
(BG_num, BG_name)
VALUES (@BG_num,@BG_name)
RETURN
حمیدرضاصادقیان
جمعه 21 خرداد 1389, 09:08 صبح
سلام
من زیاد به sqlserver وارد نیستم
میخوام به مقدار بیشترین BG_num یکی اظافه کنم و موقع insert استفاده کنم ولی دستور زیر خطا میده :
اگه میشه راهنماییم کنید
ALTER PROCEDURE dbo.BG_insert
@BG_num int= SELECT MAX([BG_num]) + 1 FROM [BookGroup],
@BG_name nvarchar(30) OUTPUT
AS
INSERT INTO BookGroup
(BG_num, BG_name)
VALUES (@BG_num,@BG_name)
RETURN
سلام
کدتون رو به شکل زیر تغییر بدید.
ALTER PROCEDURE dbo.BG_insert Bg_name nvarchar(30)
AS
Declare @bg_num int
SELECT @Bg_num=MAX([BG_num]) + 1 FROM [BookGroup],
INSERT INTO BookGroup
(BG_num, BG_name)
VALUES (@BG_num,@BG_name)
Go
quantomquery
جمعه 21 خرداد 1389, 10:32 صبح
با کمی تغییر اینطوری نوشتم :
ALTER PROCEDURE dbo.BG_insert
@BG_name nvarchar(30)
AS
Declare @BG_num int
SELECT @BG_num = MAX([BG_num]) + 1 FROM [BookGroup]
GO
INSERT INTO BookGroup
(BG_num, BG_name)
VALUES (@BG_num,@BG_name)
RETURN
ولی خطای زیر رو میده وقتی دارم ازش استفاده میکنم :
The formal parameter "@BG_name" was not declared as an OUTPUT parameter, but the actual parameter passed in requested output.
quantomquery
جمعه 21 خرداد 1389, 11:00 صبح
اها
حل شد . دستتون درد نکنه
یه OUTPUT می خواست گذاشتم
ALTER PROCEDURE dbo.BG_insert
@BG_name nvarchar(30) OUTPUT
AS
Declare @BG_num int
SELECT @BG_num = MAX([BG_num]) + 1 FROM [BookGroup]
GO
INSERT INTO BookGroup
(BG_num, BG_name)
VALUES (@BG_num,@BG_name)
RETURN
محمد سلیم آبادی
جمعه 21 خرداد 1389, 23:10 عصر
زمانی که می خواهید نتیجه ی یک Subquery را به یک متغیر scalar انتساب بدین دو راه وجود داره یکی که در پست قبلی به آن اشاره شده یعنی استفاده از عبارت assignment select و دیگری روش استاندارد یعنی بهره گیری از عبارت SET است.
وقتی که از SET برای انتساب یک subquery به یک متغیر استفاده می شود باید به دو نکته توجه داشته باشید. اول اینکه subquery تنها یک مقدار برگرداند و دوم اینکه باید داخل پرانتز نوشته شود.
یعنی:
Declare @BG_num int
SET @BG_num = (SELECT MAX([BG_num]) + 1 FROM [BookGroup]);
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.