PDA

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]);