sqlserver存储过程(转)
发布时间:2020-12-12 14:17:19 所属栏目:MsSql教程 来源:网络整理
导读:一.不含参数的存储过程1.没有返回值:创建语句:CREATE PROCEDURE dbo.ProTestAS?????DECLARE @test int????SET @test = 1Go执行SQL语句:EXEC dbo.ProTest消息:命令已成功完成。结果:无2.有返回值(使用select):创建语句:CREATE PROCEDURE dbo.ProTestAS
一.不含参数的存储过程 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出来; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |