概述
C#中执行存储过程参照:C#执行存储过程的方法
一.不含参数的存储过程
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
ASDECLARE @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
ASSELECT *
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) ,@OrderName NVARCHAR(50) ,
@RMDSC NVARCHAR(500)
AS
IF ( @OrderNO IS NOT NULL )
BEGIN
INSERT INTO dbo.Material_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 dbo.ProTest @OrderNO = N'单号001', @OrderName = N'名称001', @RMDSC = N'备注';
消息:
(1 行受影响)
(1 行受影响)
结果:1(表结构形式)
3.有返回值(使用return)
创建语句:
CREATE PROCEDURE dbo.ProTest
@OrderNO NVARCHAR(50) ,@OrderName NVARCHAR(50) ,
@RMDSC NVARCHAR(500)
AS
IF ( @OrderNO IS NOT NULL )
BEGIN
INSERT INTO dbo.Material_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 = dbo.ProTest @OrderNO = N'单号001', @OrderName = N'名称001', @RMDSC = N'备注';
SELECT @test
消息:
(1 行受影响)
(1 行受影响)
结果:1(表结构形式)
4.带输出参数的存储过程(以没有返回值的为例)
创建语句:
CREATE PROCEDURE dbo.ProTest
@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 dbo.Material_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 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出来;
最后
以上就是重要翅膀为你收集整理的SQLServer中各种存储过程创建及执行方式的全部内容,希望文章能够帮你解决SQLServer中各种存储过程创建及执行方式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复