2023年7月13日发(作者:)
SQLServer中各种存储过程创建及执⾏⽅式C#中执⾏存储过程参照:⼀.不含参数的存储过程1.没有返回值:创建语句:CREATE PROCEDURE tAS
DECLARE @test int SET @test = 1Go执⾏SQL语句:EXEC t消息:命令已成功完成。结果:⽆2.有返回值(使⽤select):创建语句:CREATE PROCEDURE tAS DECLARE @test INT; SET @test = 123; SELECT @test;GO执⾏SQL语句:EXEC t消息:(1 ⾏受影响)。结果:123(表结构形式)3.有返回值(使⽤return)创建语句:CREATE PROCEDURE tAS
DECLARE @test INT;
SET @test = 123;
RETURN @test;
GO执⾏SQL语句:DECLARE @test INT;EXEC @test = t;SELECT @test消息:(1 ⾏受影响)。结果:123(表结构形式)4.查询⼀个或多个集合(类似执⾏select)创建语句:CREATE PROCEDURE tAS
SELECT *
FROM al_SO_PipeOrder;
GO执⾏SQL语句:EXEC t消息:查询出来的条数结果:查询结果⼆.含参数的存储过程1.没有返回值创建语句:CREATE PROCEDURE t @OrderNO NVARCHAR(50) ,
@OrderName NVARCHAR(50) ,
@RMDSC NVARCHAR(500) = NULL --表⽰可为空参数
AS
IF ( @OrderNO IS NOT NULL )
BEGIN
INSERT INTO al_SO_PipeOrder
( ID, OrderNO, OrderName, RMDSC )
VALUES ( NEWID(), -- ID - uniqueidentifier
@OrderNO, -- OrderNO - nvarchar(50)
@OrderName, -- OrderName - nvarchar(50)
@RMDSC -- RMDSC - nvarchar(500)
);
END;
GO执⾏SQL语句:EXEC t @OrderNO = N'单号001', @OrderName = N'名称001', @RMDSC = N'备注'(或不写列名"EXEC t N'单号001', N'名称001', N'备注';",但不能混合使⽤,下同) 消息:(1 ⾏受影响)。结果:⽆2.有返回值(使⽤select)创建语句:CREATE PROCEDURE t @OrderNO NVARCHAR(50) ,
@OrderName NVARCHAR(50) ,
@RMDSC NVARCHAR(500)
AS
IF ( @OrderNO IS NOT NULL )
BEGIN
INSERT INTO al_SO_PipeOrder
( ID, OrderNO, OrderName, RMDSC )
VALUES ( NEWID(), @OrderNO, -- OrderNO - nvarchar(50)
@OrderName, -- OrderName - nvarchar(50) @RMDSC -- RMDSC - nvarchar(500)
);
SELECT 1;
END;
ELSE
SELECT -1;
GO执⾏SQL语句:EXEC t @OrderNO = N'单号001', @OrderName = N'名称001', @RMDSC = N'备注';消息:(1 ⾏受影响)(1 ⾏受影响)结果:1(表结构形式)3.有返回值(使⽤有返回值(使⽤return)创建语句:CREATE PROCEDURE t @OrderNO NVARCHAR(50) ,
@OrderName NVARCHAR(50) ,
@RMDSC NVARCHAR(500)
AS
IF ( @OrderNO IS NOT NULL )
BEGIN
INSERT INTO al_SO_PipeOrder
( ID, OrderNO, OrderName, RMDSC )
VALUES ( NEWID(), @OrderNO, -- OrderNO - nvarchar(50)
@OrderName, -- OrderName - nvarchar(50)
@RMDSC -- RMDSC - nvarchar(500)
);
RETURN 1;
END;
ELSE
RETURN -1;
GO执⾏SQL语句:DECLARE @test INT;EXEC @test = t @OrderNO = N'单号001', @OrderName = N'名称001', @RMDSC = N'备注';SELECT @test消息:(1 ⾏受影响)(1 ⾏受影响)结果:1(表结构形式)4.带输出参数的存储过程(以没有返回值的为例)创建语句:CREATE PROCEDURE t @OrderNO NVARCHAR(50) ,
@OrderName NVARCHAR(50) ,
@RMDSC NVARCHAR(500) ,
@ID UNIQUEIDENTIFIER OUTPUT --输出参数要⽤output标识
AS
IF ( @OrderNO IS NOT NULL )
BEGIN
DECLARE @newID UNIQUEIDENTIFIER;
SET @newID = NEWID();
INSERT INTO al_SO_PipeOrder
( ID ,
OrderNO ,
OrderName ,
RMDSC
)
VALUES ( @newID ,
@OrderNO , -- OrderNO - nvarchar(50)
@OrderName , -- OrderName - nvarchar(50)
@RMDSC -- RMDSC - nvarchar(500)
);
SET @ID = @newID;--可以不赋值
END;
ELSE
SET @ID = NULL;--可以不赋值
GO执⾏SQL语句:DECLARE @IDTest UNIQUEIDENTIFIER;EXEC t @OrderNO = N'单号001', -- nvarchar(50) @OrderName = N'名称001', -- nvarchar(50) @RMDSC = N'备注', -- nvarchar(500) @ID = @IDTest OUTPUT; --如果不加OUTPUT,select结果为NULLSELECT @IDTest;消息:(1 ⾏受影响)(1 ⾏受影响)结果:EDD11EF3-CD03-4C95-8B79-B3123B34C292(表结构形式)三.总结与注意:1.关于存储过程的返回值:(1).如果有return,则返回return的结果;(2).如果没有return,则返回INT值0(即使存储过程中有select集合,或Insert受影响⾏等);(3).如果带输出参数,则存储过程的返回值同(1),(2);OUTPUT的参数需要select出来;
发布者:admin,转转请注明出处:http://www.yc00.com/news/1689246803a225635.html
评论列表(0条)