SQL存储过程之Insert插入存储过程的创建以及调用

–创建带有参数的Insert Into的存储过程
use TestDB
go
if OBJECT_ID(‘InsertStudent’,‘P’) IS NOT NULL
Drop Procedure InsertStudent
go
Create Procedure InsertStudent–添加变量
–SNO, SName, Gender, Birthday, Mobile, Email, HomeAddress, PhotoPath
@SN0 INT,
@SName CHAR(10),
@Gender CHAR(2),
@Birthday DATETIME,
@Mobile CHAR(20),
@Email CHAR(100),
@HomeAddress CHAR(100),
@PhotoPath CHAR(100)
AS
INSERT INTO Student VALUES(@SN0,@SName,@Gender,@Birthday,@Mobile,@Email,@HomeAddress)
go

–调用插入的存储过程

USE TestDB
exec TestDB.dbo.InsertStudent @SN0=95220,@SName=‘张三书’,@Gender=‘男’,@Birthday=‘1994-07-25’,@Mobile=‘13475111111’,@Email=‘1@.COM’,@HomeAddress=‘山东德州’,@PhotoPath=‘123’

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
存储过程的安全及性能优化 存储过程分类  系统存储过程  自定义存储过程SQL Server使用者编写的存储过程  扩展存储过程  动态链接库(DLL)函数的调用看,主要用于客户端和服务器端之间进行通信  exec master..xp_cmdshell 'dir *.exe' -- 执行目录命令查询[sql2005\sql2008]  exec master..xp_fixeddrives --列出硬盘分区各自可用空间  xp_regwrite根键,子键,值名,值类型,值【sql2008拒绝访问】  写入注册表,例如:  exec master..db.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\run','TestValueName','reg_sz','hello'  xp_regdeletevalue 根键,子键,值名【sql2008拒绝访问】  删除注册表某个值  xp_regdeletekey键,值【sql2008拒绝访问】  删除该键下包括的所有值 xp_cmdshell语法  xp_cmdshell {'command_string'} [,no_output]  command_string是在操作系统命令行解释器上执行的命令字符串。command_string数据类型为varchar(255)或者nvarchar(4000),没有默认值  no_output为可选参数,可以控制是否想客户端返回信息  该存储过程一般情况下被禁用的,需要手动开启使用,如下:  exec sp_configure 'show advanced options',1  go   reconfigure  go   exec sp_configure 'xp_cmdshell',1—1表示启用,0表示禁用  go   reconfigure  go 删除xp_cmdshell SQL SERVER200删除xp_cmdshell use master exec sp_dropextendedproc 'xp_cmdshell' go SQL SERVER2005以上禁用xp_cmdshell,但不能删除掉 exec sp_configure 'xp_cmdshell',0 —1表示启用,0表示禁用  go reconfigure --让sp_configurre立即生效  go  exec sp_configure 'show advanced options',0  go   reconfigure  go --注意:SQL SERVER2008考虑安全性很多存储过程直接被拒绝访问 恢复/启用扩展存储过程 SQLServer2000 use master exec sp_addextendedproc xp_cmdshell,'xplog70.dll' go SQL Server2005或SQL Server2008启用xp_cmdshell  exec sp_configure 'show advanced options',1  go   reconfigure  go   exec sp_configure 'xp_cmdshell',1—1表示启用,0表示禁用  go   reconfigure  go 扩展存储过程的定义  扩展存储过程SQL Server中的另一类存储过程,它是以其它语言编写的外部程序,是以动态链接库(DLL)形式存储在服务器上,最终SQLServer就可以动态加载并执行它们  编写好后使用SQLServer的固定角色sysadmin注册该扩展存储过程,并将执行权限授予其它用户,这个扩展存储过程只能添加到master数据库。  在编写扩展存储过程中可能要用到某些系统存储过程,这些系统存储过程如下: 利用OLE自动化存储过程调用dll 1.创建类库程序集 namespace PB_ExtendProcedure { public class ExtendProcedure { public string SayHi() { return "hello world"; } } } 2.生成动态链接库并注册到系统中 2.1.生成动态链接库使用VS2010命令行工具 使用sn命令生成一个强命名文件: sn -k he
---创建数据库 create database CRM; --删除数据库 drop database CRM; --创建一个表 if exists(select * from sysobjects where name='Users') drop table Users go create table Users( Id int identity(1,1) not null primary key, --顾客编号,主键 按一进行自动增长 UserName varchar(50)not null, PassWord varchar(50)not null, Address varchar(250)not null, ) go ----------------------------------------插入100条数据进Users表,进行下面对分页做准备---------------- Begin Declare @n bigint Declare @Sql nvarchar(225) set @n=0 While @n<100--导入100条相同的数据进Users表 Begin Set @Sql='Insert into Users Values(''jilongliang'',''123456'',''广东阳春'')' Exec (@Sql) set @n=@n+1 End End ------------查询一下是不是插入--------------- Select *from Users; -------------------------存储过程创建语法----------------------------------- /* 1.存储过程创建语法 create proc | procedure pro_name [{@参数数据类型} [=默认值] [output], {@参数数据类型} [=默认值] [output], .... ] as SQL_statements */ --------------------------------------------------------------------------------- -------------------------- 带参存储过程----------------------------------- if (object_id('proc_find_users', 'P') is not null) drop proc proc_find_users go create proc proc_find_users(@startId int, @endId int) as ---between and 表示在那个两个数字之间 select * from users where Id between @startId and @endId go exec proc_find_users 42, 64; --------------------------------------------------------------------------------- --------------------------------带通配符参数存储过程----------------------------- if (object_id('proc_findUsersByName', 'P') is not null) drop proc proc_findUsersByName go create proc proc_findUsersByName(@UserName varchar(20) = '%j%', @nextName varchar(20) = '%') as select * from Users where UserName like @UserName and UserName like @nextName; go exec proc_findUsersByName; exec proc_findUsersByName '%l%', 'j%'; --------------------------------------------------------------------------------------- ----------------------------------------带输出参数存储过程--------------------------------------- if (object_id('proc_getUsersRecord', 'P') is not null) drop proc proc_getUsersRecord go create proc proc_getUsersRecord( @Id int, --默认输入参数 @UserName varchar(20) out, --输出参数 @address varchar(20) output --输入输出参数 ) as select @UserName = UserName, @address = address from Users where Id = @Id and Address = @address; go ---------------声明变量 declare @id int, @address varchar(20), @UserName varchar(20), @temp varchar(20); set @id = 71; set @temp = 1; exec proc_getUsersRecord @id, @UserName out, @temp output; select @UserName as 用户名, @temp as temp,@address as 地址; print @UserName + '#' + @temp; --------------------------------------------------------------------------------------- -----------------------------------不缓存存储过程--------------------------------------- --WITH RECOMPILE 不缓存 if (object_id('proc_temp', 'P') is not null) drop proc proc_temp go create proc proc_temp with recompile as select * from users; go exec proc_temp; -----------------------------------加密存储过程------------------------------------- --加密WITH ENCRYPTION if (object_id('proc_temp_encryption', 'P') is not null) drop proc proc_temp_encryption go create proc proc_temp_encryption with encryption as select * from users; go exec proc_temp_encryption; exec sp_helptext 'proc_temp'; exec sp_helptext 'proc_temp_encryption'; -----------------------------------带游标参数存储过程------------------------------------- if (object_id('proc_cursor', 'P') is not null) drop proc proc_cursor go create proc proc_cursor @cur cursor varying output as set @cur = cursor forward_only static for select Id, UserName, Address from Users; open @cur; go --调用 declare @exec_cur cursor; declare @Id int, @UserName varchar(50), @Address varchar(250); exec proc_cursor @cur = @exec_cur output;--调用存储过程 fetch next from @exec_cur into @Id, @UserName, @Address; while (@@fetch_status = 0) begin fetch next from @exec_cur into @Id, @UserName, @Address; print 'Id: ' + convert(varchar, @Id) + ', name: ' + @UserName + ', Address: ' + @Address; end close @exec_cur; deallocate @exec_cur;--删除游标 ---------------------------------------------------------- select * from sys.messages; --使用sysmessages中定义的消息 --------------------------------Query--------------------- Create PROCEDURE proc_LoginUser @userName varchar(50), @password varchar(50) as begin select UserName,PassWord from Users where UserName = @userName and PassWord = @PassWord end GO --这个Go注意不要放在Exec后面,否则报超出了存储过程、函数、 --触发器或视图的最大嵌套层数(最大层数为 32) exec proc_LoginUser @userName = 'admin',@PassWord = 'admin' --------------------------------Insert--------------------- Create proc proc_InsertUsers @UserName varchar(50), @PassWord varchar(50), @Address varchar(150) as insert into proc_InsertUsers values(@UserName,@PassWord,@Address) --------------------------------Update--------------------- --修改模块信息,根据模块Id Create proc proc_UpdateUser @UserName varchar(50), @PassWord varchar(50), @Address varchar(150), @Id int as update Users set UserName=@UserName,PassWord=@PassWord ,Address=@Address where Id = @Id --------------------------------Delete--------------------- Create proc proc_DeleteById @Id int as delete from Users where Id=@Id ----------------------------------------------------------- ------------------------------------------------------------------------------------- ----------------------------------分页存储过程-------------------------------------- ------------------------------------------------------------------------------------- If (object_id('pro_page', 'P') is not null) drop proc proc_Page GO create procedure proc_Page( @pageIndex int, @pageSize int ) as declare @startRow int, @endRow int --声明变量 set @startRow = (@pageIndex - 1) * @pageSize +1 --设值 set @endRow = @startRow + @pageSize -1 --设值 select ID,UserName,Address,PassWord,t.number from --t.number的行号 ( select ID,UserName,Address,PassWord, row_number() over (order by id asc) as number from Users ) t where t.number between @startRow and @endRow; GO ----执行 exec proc_Page 1, 3; -- 一页,三条数据 ------------------------------------------------------------------------------------- ---存储过程、row_number完成分页 if (object_id('pro_page', 'P') is not null) drop proc proc_cursor -- drop proc pro_page go create proc pro_Page @startIndex int, @endIndex int as select count(*) as Total from Users; --计算出来总数 select * from ( select row_number() over(order by Id) as rowId, * from Users ) temp where temp.rowId between @startIndex and @endIndex go exec pro_Page 1, 4 ------------------------------------------------------------------------------------- -------------------------------------数据库的函数-------------------------------------- exec sp_databases; --查看数据库 exec sp_tables; --查看表 exec sp_columns users;--查看列 exec sp_helpIndex users;--查看索引 exec sp_helpConstraint users;--约束 exec sp_stored_procedures; exec sp_helptext 'sp_stored_procedures';--查看存储过程创建、定义语句 exec sp_rename users, stuInfo;--修改表、索引、列的名称 exec sp_renamedb myTempDB, myDB;--更改数据库名称 exec sp_defaultdb 'master', 'myDB';--更改登录名的默认数据库 exec sp_helpdb;--数据库帮助,查询数据库信息 exec sp_helpdb master; ------------------------------------------------------------------------------------- ---------------------------数据库的sp_rename重命名函数------------------------------- --表重命名 exec sp_rename 'users', 'tb_users'; select * from tb_users; --列重命名 exec sp_rename 'tb_users.name', 'sName', 'column'; exec sp_help 'tb_users'; --重命名索引 exec sp_rename N'tb_users.idx_cid', N'idx_cidd', N'index'; exec sp_help 'tb_users'; --查询所有存储过程 select * from sys.objects where type = 'P'; select * from sys.objects where type_desc like '%pro%' and name like 'sp%';
实验5.1 存储过程的建立与使用 一、实验目的 理解存储过程的概念、作用、建立和调用方法。 二、实验原理 使用CREATE PROCEDURE语句创建存储过程,ALTER PROCEDURE语句修改存储过程,DROP PROCEDURE语句删除存储过程存储过程有不带参数的、有带输入参数的、有带输出参数(output)的,还可以有带返回值的。创建好的存储过程可以使用EXEC procedure_name语句执行。 实验5.2 触发器的建立与使用 一、实验目的 理解触发器的概念和作用;了解触发器的分类及触发条件;掌握触发器的定义及应用。 二、实验原理 1、 使用CREATE TRIGGER语句定义触发器,ALTER TRIGGER语句修改触发器,DROP TRIGGER语句删除触发器。 2、 触发器分AFTER/FOR和INSTEAD OF两种类型:AFTER/FOR类型的触发器是在相应的触发语句(insert、delete、update)执行完后被触发的。如果触发语句对应的表上有完整性约束,这些完整性约束必须不违背时,相应的触发语句才能执行,然后才能触发对应的AFTER/FOR类型的触发器。INSTEAD OF类型的触发器会在触发语句(insert、delete、update)执行之前被触发,并取代相应的触发语句。 3、 在表或视图上,每个INSERT、UPDATE或DELETE语句只能创建一个INSTEAD OF类型的触发器,无法为有外键约束且指定为级联删除或级联修改的表创建DELETE或UPDATE语句上的INSTEAD OF 类型的触发器。 SQL SERVER为每个触发器都创建了两个临时表INSERTED表和DELETED表,这两个表的逻辑结构与被触发器作用的表一样,用户可以读取这两个表的内容,但不能对它们进行修改,触发器执行完后,这两个表也会自动删除。当执行INSERT时,INSERTED表中保存要向表中插入的所有行;当执行DELETE时,DELETED表中保存要从表中删除的所有行;当执行UPDATE时,修改前的行保存在DELETED表中,修改后的行保存在INSERTED行中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值