本来是想写windev调用存储过程,结果sqlserver先折腾了我好久。个人主要参考这篇教程 SQL Server的存储过程怎么写?_百度知道 (baidu.com),sqlserver存储过程入门例子加讲解 - 百度文库 (baidu.com) 还有sql自带的文档
ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_1devconc/html/76e8a6ba-1381-4620-b356-4311e1331ca7.htm
把大象装冰箱第一步打开冰箱门 sqlServer2008R2下载地址 链接:https://pan.baidu.com/s/1VZVCrkgz9kcerQhMrAjbLg 提取码:1234
以管理员身份打开SQL Server Manegment stdudio 然后是创建数据库,在数据库上点击右键,新建数据库
这里建一个测试表,
创建一个账号,右键点击用户,点新建用户,这里新建了一个test用户
在安全性,登录名上 给test 用户配置密码
这样别人就可以用用户名test登录 test数据库
在test数据库里找可编程性,就能看到存储过程
这里是官方文档
本主题介绍如何使用 SQL Server Management Studio 中的对象资源管理器创建 Transact-SQL 存储过程,并提供一个在 AdventureWorks2008R2 数据库中创建简单存储过程的示例。 创建存储过程 在对象资源管理器中,连接到某个数据库引擎实例,再展开该实例。 展开“数据库”、存储过程所属的数据库以及“可编程性”。 右键单击“存储过程”,再单击“新建存储过程”。 在“查询”菜单上,单击“指定模板参数的值”。 在“指定模板参数的值”对话框中,“值”列包含参数的建议值。接受这些值或将其替换为新值,再单击“确定”。 在查询编辑器中,使用过程语句替换 SELECT 语句。 若要测试语法,请在“查询”菜单上,单击“分析”。 若要创建存储过程,请在“查询”菜单上,单击“执行”。 若要保存脚本,请在“文件”菜单上,单击“保存”。接受该文件名或将其替换为新的名称,再单击“保存”。 安全说明: 验证所有用户的输入。验证前请勿连接用户输入。绝对不要执行根据尚未验证的用户输入构造的命令。有关详细信息,请参阅SQL 注入。 创建存储过程的示例 在对象资源管理器中,连接到某个数据库引擎实例,再展开该实例。 依次展开“数据库”、AdventureWorks2008R2 数据库和“可编程性”。 右键单击“存储过程”,再单击“新建存储过程”。 在“查询”菜单上,单击“指定模板参数的值”。 在“指定模板参数的值”对话框中,输入下列所示的参数值。 参数 值 Author 您的姓名 Create Date 今天的日期 Description 返回雇员数据。 Procedure_name HumanResources.uspGetEmployees @Param1 @LastName @Datatype_For_Param1 nvarchar(50) Default_Value_For_Param1 NULL @Param2 @FirstName @Datatype_For_Param2 nvarchar(50) Default_Value_For_Param2 NULL 单击“确定”。 在查询编辑器中,使用以下语句替换 SELECT 语句: 复制代码 SELECT FirstName, LastName, JobTitle, Department FROM HumanResources.vEmployeeDepartment WHERE FirstName = @FirstName AND LastName = @LastName; 若要测试语法,请在“查询”菜单上,单击“分析”。如果返回错误消息,则请将这些语句与上述信息进行比较,并视需要进行更正。 若要创建存储过程,请在“查询”菜单上,单击“执行”。 若要保存脚本,请在“文件”菜单上,单击“保存”。输入新的文件名,再单击“保存”。 若要运行存储过程,请在工具栏上单击“新建查询”。 在查询窗口中,输入下列语句: 复制代码 USE AdventureWorks2008R2; GO EXECUTE HumanResources.uspGetEmployees @FirstName = N'Diane', @LastName = N'Margheim'; GO 在“查询”菜单上,单击“执行”。
我这里先建一个无参数的存储过程,功能是删库跑路
CREATE PROCEDURE ProDeleteAll -- Add the parameters for the stored procedure here AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here Delete from Table_1 END GO
先点对勾检查语法,,然后点感叹号执行,就能在可编程性那里看到存储过程(可能要点刷新)。在存储过程名上点右键,执行存储过程,可以发现表里数据都被删除了。
,在ProDeleteAll上点右键,点执行存储过程
如果想查看存储过程的定义,需要这么搞,新建一个查询,输入下边
USE test; GO EXEC sp_helptext 'ProDeleteAll'; GO
点执行,就能看到ProDeleteAll的定义了,或者在存储sql的文件夹里直接查看sql文件
或者用下面语句是一样的执行存储过程
USE [test] GO DECLARE @return_value int EXEC @return_value = [dbo].[ProDeleteAll] SELECT 'Return Value' = @return_value GO
建立一个带参数的存储过程 ,删除表里c等于输入参数的数据
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: kyo -- Create date: 20210527 -- Description: 删除c等于输入参数的行 -- ============================================= CREATE PROCEDURE ProcDeleteC -- Add the parameters for the stored procedure here @c int AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; Delete from Table_1 where c = @c END GO
用下列命令执行
USE [test] GO DECLARE @return_value int EXEC @return_value = [dbo].[ProcDeleteC] @c = "45" SELECT 'Return Value' = @return_value GO
建立一个带输入参数和返回参数的存储过程 ,返回表里c等于输入参数的行的a
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: kyo -- Create date: -- Description: -- ============================================= CREATE PROCEDURE ProRetureAWhrerC -- Add the parameters for the stored procedure here @c int , @a varchar(10) output AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here SELECT @a = a from Table_1 where c = @c END GO
如下执行
USE [test] GO DECLARE @return_value int, @a varchar(10) EXEC @return_value = [dbo].[ProRetureAWhrerC] @c = 445, @a = @a OUTPUT SELECT @a as N'@a' SELECT 'Return Value' = @return_value GO