加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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出来;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读