sqlserver存储过程(转)
一.不含参数的存储过程
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) ,
@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出来;
例子 CREATE PROCEDURE getCatoryChildLst @name NVARCHAR(50)
AS
IF ( @name IS NOT NULL )
BEGIN
SELECT str(tt.ttid)+',' FROM (SELECT id as ttid FROM fhcb_08_tbl_category where charindex('~' + @name+ '~' , '~' + FULL_ID+ '~')>0) as tt FOR XML PATH('')
END;
ELSE
SELECT -1;
sqlserver存储过程(转)的更多相关文章
- 解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译)
解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译) http://improve.dk/where-does-sql-server-store-the-sourc ...
- Sqlserver 存储过程中结合事务的代码
Sqlserver 存储过程中结合事务的代码 --方式一 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ ...
- SqlServer存储过程学习笔记(增删改查)
* IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值. CREATE PROCEDURE [dbo].[PR_NewsAffiche_AddNewsEntity] ( ...
- SQLServer 存储过程嵌套事务处理
原文:SQLServer 存储过程嵌套事务处理 某个存储过程可能被单独调用,也可能由其他存储过程嵌套调用,则可能会发生嵌套事务的情形. 下面是一种解决存储过程嵌套调用的通用代码,在不能确定存储过程是否 ...
- 创建并在项目中调用SQLSERVER存储过程的简单示例
使用SQLSERVER存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用.创建存储过程 和数据表一样,在使用之前需要创建存储过程,它的简明语法是: 引用: Create PROC ...
- SQLSERVER存储过程语法详解
CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ...
- SqlServer存储过程详解
SqlServer存储过程详解 1.创建存储过程的基本语法模板: if (exists (select * from sys.objects where name = 'pro_name')) dro ...
- sqlServer存储过程与sql语句的区别
sqlServer 存储过程与sql语句的区别 sql存储过程与sql语句的区别: 从以下几个方面考虑: 1.编写: 存储过程:编写比较难: sql语句:相对简单: 2.性能: 存储过程:高,可移 ...
- SqlServer存储过程(增删改查)
* IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值. CREATE PROCEDURE [dbo].[PR_NewsAffiche_AddNewsEntity] ( ...
- SQLSERVER存储过程的基本语法实例
SQLSERVER存储过程的基本语法实例 SQLSERVER存储过程的基本语法实例 一.定义变量--简单赋值 declare @a intset @a=5 print @a --使用select语句赋 ...
随机推荐
- csharp - retrieve LDAP
DirectoryEntry de = new DirectoryEntry("LDAP://10.10.10.10:389"); DirectorySearcher search ...
- 监控服务器的脚本log_agent
监控服务器脚本: 将恶意攻击IP地址加入黑名单 1.分割日志 使用os.system 执行操作系统命令,使用重定向来分割日志 2.获取访问ip 读日志文件,获取访问ip记录,使用字符串.split来获 ...
- 2、单线性变量的回归(Linear Regression with One Variable)
2.1 模型表示 我们通过一个例子来开始:这个例子是预测住房价格的,我们要使用一个数据集,数据集包含俄勒冈州波特兰市的住房价格.在这里,我要根据不同房屋尺寸所售出的价格,画出我的数据集.比方说,如果你 ...
- 2019牛客暑期多校训练营(第二场) - H - Second Large Rectangle - dp
https://ac.nowcoder.com/acm/contest/882/H 正确的办法:dp1[i][j]表示以i,j为底的矩形的高.得到dp1之后,dp2[i][j]表示以dp1[i][j] ...
- IDA Pro - 如何得到比较清楚的逆向伪代码
原文地址:Question about disassembler 简介 这篇文章介绍了如何在不使用插件的IDA Hex-Rays如何得到比较清晰的伪代码.IDA Hex-Rays功能很强大,只要你提供 ...
- Android使用gradle依赖管理、依赖冲突终极解决方案(转)
Android使用gradle依赖管理.依赖冲突终极解决方案在Android开发中,相信遇到关于版本依赖的问题的同学有不少.虽然Android Studio一般都会自动帮我们去重,但是有时候去重失败了 ...
- java类使用
package java04; /* * 通常情况下,一个类不能直接使用,需要创建一个对象,才能使用 * *步骤: * 1.导包:就是指出需要使用的类在什么位置 * import 包名称.类名称: * ...
- [BZOJ3669] [NOI2004] 魔法森林 LCT维护最小生成树
题面 一开始看到这道题虽然知道是跟LCT维护最小生成树相关的但是没有可以的去想. 感觉可以先二分一下总的精灵数,但是感觉不太好做. 又感觉可以只二分一种精灵,用最小生成树算另一种精灵,但是和似乎不单调 ...
- 如何在Ubuntu 18.04上安装Apache Web服务器
一. apt库安装 1.在终端输入更新检查命令,sudo apt-get update 2. 在更新完成后(如果不想检查更新,也可直接输入此步)输入:sudo apt-get install apac ...
- Python 无法安装PyAudio问题
一.错误与原因 在Windows上没有用于Python 3.7的轮子(预构建包)(有一个用于Python 2.7和3.4到3.6),因此需要在PC上准备构建环境以使用此包.因为有些软件包很难在Wind ...