我有一个Transaction
表,其中包含以下列:
PoojaDetailsID,
ReceiptNo - computed varchar(25) contains a combination of both characters and numbers,
ReceiptDate,
FirstName,
LastName,
TelNo and many other columns...
我想创建一个存储过程来在事务表中插入数据,并将插入记录的ReceiptNo
捕获为Output
参数。我正在使用ASP.net应用程序来存储数据。
请告知。
答案 0 :(得分:0)
有很多事情可以说。希望这个例子足以满足你的需求。
CREATE PROCEDURE DoTheJob
-- Add the parameters for the stored procedure here
@Param1 varchar(10),
@param2 varchar(20),
@result varchar(30) output
AS
BEGIN
SET NOCOUNT ON;
set @result='actually put the requred code di fill the result'
insert into YourTable select from YourData
END
GO
答案 1 :(得分:0)
CREATE Procedure usp_SomeName
@PoojaDetailsID INT = NULL,
@ReceiptNo varchar(25) = NULL OUTPUT,
@ReceiptDate Datetime = NULL,
@FirstName VARCHAR(50) = NULL,
@LastName VARCHAR(50) = NULL,
@TelNo VARCHAR(50) = NULL
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
IF @ReceiptNo IS NULL
RAISERROR('Validation Failed: ReceiptNo name cannot be null', 16,1)
IF EXISTS (SELECT ReceiptNo FROM dbo.TableName
WHERE ReceiptNo = @ReceiptNo)
RAISERROR('Validation Failed: ReceiptNo Name already Exists',16,1)
BEGIN TRANSACTION
INSERT INTO TableName(Column1, Column2, Column3,....)
VALUES (@Variable1, @Variable2, @Variable3,.... )
COMMIT TRANSACTION
SET @ReceiptNo = ---<----- How ever you will determine the value of @ReceiptNo
--<----- if your user will pass the value then just set the variable
--<---- Then Just Using the The Key word "OUTPUT" will do the trick
END TRY
BEGIN CATCH
IF (@@TRANCOUNT > 0)
ROLLBACK TRAN
SELECT @ReturnCode = ERROR_NUMBER(), @ReturnMessage = ERROR_MESSAGE()
SELECT ERROR_NUMBER() AS ERRORNUMBER,
ERROR_MESSAGE() AS ReturnMessage,
ERROR_LINE() AS ErrorLine,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState
END CATCH
SET NOCOUNT OFF;
END
GO
调用存储过程时,声明类型为@RtnReceiptNo varchar(25)
的变量,并使用关键字OUTPUT
将其传递给存储过程。
像这样......
DECLARE @RtnReceiptNo varchar(25) = '12BCkj12KK'
EXECUTE usp_SomeName
@PoojaDetailsID = 1,
@ReceiptNo = @RtnReceiptNo OUTPUT,
@ReceiptDate = 'SomeDate',
@FirstName = 'FistName',
@LastName = 'LastName',
@TelNo = '1465161516'
SELECT @RtnReceiptNo
修改强>
由于您的@ReceiptNo
来自计算列,或者您需要在代码中执行一些额外步骤来捕获它。
使用数据类型为Table Variable
的一列声明@ReceiptNo
然后在您的插入语句中使用OUTPUT
子句获取@ReceiptNo和INSERT INTO插入的表变量的值,然后SELECT
从那里将它分配给存储过程的OUTPUT变量。
存储过程定义的其余部分保持不变只需更改INSERT语句,如下所示
DECLARE @tbl TABLE (Value VARCHAR(25)) --<--- Table variable to insert the @ReceiptNo values
INSERT INTO Table_Name (Column1, Column2, Column3, ....)
OUTPUT inserted.ReceiptNo INTO @tbl ---<---- Using OUTPUT and inserted Table retrieve
VALUES (Value1, 'Value2',....) --the newly inserted ReceiptNo values and
---insert into your Table Variable
SELECT @ReceiptNo = Value FROM @tbl --<--- Retrieve the value from table variable and
-- store it into the variable you will OUTPUT
-- from you stored procedure