一.不含参数的存储过程 1.没有返回值: 创建语句: CREATE PROCEDURE dbo.ProTest AS DECLARE @test int SET @test = 1 Go 执行sql语句: EXEC dbo.ProTest 消息:命令已成功完成。结果:无 2.有返回值(使用select): 创建语句: CREATE PROCEDURE dbo.ProTest AS DECLARE @test INT; SET @test = 123; SELECT @test; GO 执行sql语句: EXEC dbo.ProTest 消息:(1 行受影响)。结果:123(表结构形式) 3.有返回值(使用return) 创建语句: CREATE PROCEDURE dbo.ProTest AS DECLARE @test INT; SET @test = 123; RETURN @test; GO 执行sql语句: DECLARE @test INT; EXEC @test = dbo.ProTest; SELECT @test 消息:(1 行受影响)。结果:123(表结构形式) 4.查询一个或多个集合(类似执行select) 创建语句: CREATE PROCEDURE dbo.ProTest AS SELECT * FROM dbo.Material_SO_PipeOrder; GO 执行sql语句: EXEC dbo.ProTest 消息:查询出来的条数 结果:查询结果 二.含参数的存储过程 1.没有返回值 创建语句: CREATE PROCEDURE dbo.ProTest @OrderNO NVARCHAR(50), @OrderName NVARCHAR(50), @RmdsC NVARCHAR(500) = NULL --表示可为空参数 AS IF ( @OrderNO IS NOT NULL ) BEGIN INSERT INTO dbo.Material_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 dbo.ProTest @OrderNO = N‘单号001‘,@OrderName = N‘名称001‘,@RmdsC = N‘备注‘ (或不写列名"EXEC dbo.ProTest N‘单号001‘,N‘名称001‘,N‘备注‘;",但不能混合使用,下同) 消息:(1 行受影响)。结果:无 2.有返回值(使用select) 创建语句: CREATE PROCEDURE dbo.ProTest @OrderNO NVARCHAR(50), @RmdsC NVARCHAR(500) AS IF ( @OrderNO IS NOT NULL ) BEGIN INSERT INTO dbo.Material_SO_PipeOrder ( ID,@OrderNO,-- OrderName - nvarchar(50) @RmdsC -- RmdsC - nvarchar(500) ); SELECT 1; END; ELSE SELECT -1; GO 执行sql语句: EXEC dbo.ProTest @OrderNO = N‘单号001‘,@RmdsC = N‘备注‘; 消息: (1 行受影响) (1 行受影响) 结果:1(表结构形式) 3.有返回值(使用return) 创建语句: CREATE PROCEDURE dbo.ProTest @OrderNO NVARCHAR(50),-- OrderName - nvarchar(50) @RmdsC -- RmdsC - nvarchar(500) ); RETURN 1; END; ELSE RETURN -1; GO 执行sql语句: DECLARE @test INT; EXEC @test = dbo.ProTest @OrderNO = N‘单号001‘,@RmdsC = N‘备注‘; SELECT @test 消息: (1 行受影响) (1 行受影响) 结果:1(表结构形式) 4.带输出参数的存储过程(以没有返回值的为例) 创建语句: CREATE PROCEDURE dbo.ProTest @OrderNO NVARCHAR(50), @RmdsC NVARCHAR(500), @ID UNIQUEIDENTIFIER OUTPUT --输出参数要用output标识 AS IF ( @OrderNO IS NOT NULL ) BEGIN DECLARE @newID UNIQUEIDENTIFIER; SET @newID = NEWID(); INSERT INTO dbo.Material_SO_PipeOrder ( ID, OrderNO, OrderName, RmdsC ) VALUES ( @newID, @OrderNO,-- OrderName - nvarchar(50) @RmdsC -- RmdsC - nvarchar(500) ); SET @ID = @newID;--可以不赋值 END; ELSE SET @ID = NULL;--可以不赋值 GO 执行sql语句: DECLARE @IDTest UNIQUEIDENTIFIER; EXEC dbo.ProTest @OrderNO = N‘单号001‘,-- nvarchar(50) @OrderName = N‘名称001‘,-- nvarchar(50) @RmdsC = N‘备注‘,-- nvarchar(500) @ID = @IDTest OUTPUT; --如果不加OUTPUT,select结果为NULL SELECT @IDTest; 消息: (1 行受影响) (1 行受影响) 结果:EDD11EF3-CD03-4C95-8B79-B3123B34C292(表结构形式) 三.总结与注意: 1.关于存储过程的返回值: (1).如果有return,则返回return的结果; (2).如果没有return,则返回INT值0(即使存储过程中有select集合,或Insert受影响行等); (3).如果带输出参数,则存储过程的返回值同(1),(2);OUTPUT的参数需要select出来;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。