SQL Server 2008 存储过程示例

和蔼的小嘚瑟

和蔼的小嘚瑟

2016-02-19 09:16

今天图老师小编要跟大家分享SQL Server 2008 存储过程示例,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!
 --有输入参数的存储过程--create proc GetComment(@commentid int)asselect * from Comment where CommentID=@commentid --有输入与输出参数的存储过程--create proc GetCommentCount@newsid int,@count int outputasselect @count=count(*) from Comment where NewsID=@newsid  --返回单个值的函数--create function MyFunction(@newsid int)returns intasbegindeclare @count intselect @count=count(*) from Comment where NewsID=@newsidreturn @countend --调用方法--declare @count intexec @count=MyFunction 2print @count --返回值为表的函数--Create function GetFunctionTable(@newsid int)returns tableasreturn(select * from Comment where NewsID=@newsid) --返回值为表的函数的调用--select * from GetFunctionTable(2)

SQLServer 存储过程中不拼接SQL字符串实现多条件查询

--以前拼接的写法  set @sql=' select * from table where 1=1 '  if (@addDate is not null)   set @sql = @sql+' and addDate = '+ @addDate + ' '  if (@name '' and is not null)   set @sql = @sql+ ' and name = ' + @name + ' '  exec(@sql)

下面是 不采用拼接SQL字符串实现多条件查询的解决方案

  --第一种写法是 感觉代码有些冗余  if (@addDate is not null) and (@name  '')   select * from table where addDate = @addDate and name = @name  else if (@addDate is not null) and (@name ='')   select * from table where addDate = @addDate  else if(@addDate is null) and (@name  '')   select * from table where and name = @name  else if(@addDate is null) and (@name = '')  select * from table  --第二种写法是  select * from table where (addDate = @addDate or @addDate is null) and (name = @name or @name = '')  --第三种写法是  SELECT * FROM table where  addDate = CASE @addDate IS NULL THEN addDate ELSE @addDate END,  name = CASE @name WHEN '' THEN name ELSE @name END

SQLSERVER存储过程基本语法

一、定义变量

--简单赋值declare @a intset @a=5print @a --使用select语句赋值declare @user1 nvarchar(50)select @user1= '张三'print @user1declare @user2 nvarchar(50)select @user2 = Name from ST_User where ID=1print @user2 --使用update语句赋值declare @user3 nvarchar(50)update ST_User set @user3 = Name where ID=1print @user3 

二、表、临时表、表变量

--创建临时表1create table #DU_User1(   [ID] [ int ]  NOT NULL ,   [Oid] [ int ] NOT NULL ,   [Login] [nvarchar](50) NOT NULL ,   [Rtx] [nvarchar](4) NOT NULL ,   [ Name ] [nvarchar](5) NOT NULL ,   [ Password ] [nvarchar]( max ) NULL ,   [State] [nvarchar](8) NOT NULL);--向临时表1插入一条记录insert into #DU_User1 (ID,Oid,[Login],Rtx, Name ,[ Password ],State) values (100,2, 'LS' , '0000' , '临时' , '321' , '特殊' ); --从ST_User查询数据,填充至新生成的临时表select * into #DU_User2 from ST_User where ID8 --查询并联合两临时表select * from #DU_User2 where ID3 union select * from #DU_User1 --删除两临时表drop table #DU_User1drop table #DU_User2 --创建临时表CREATE TABLE #t(   [ID] [ int ] NOT NULL ,   [Oid] [ int ] NOT NULL ,   [Login] [nvarchar](50) NOT NULL ,   [Rtx] [nvarchar](4) NOT NULL ,   [ Name ] [nvarchar](5) NOT NULL ,   [ Password ] [nvarchar]( max ) NULL ,   [State] [nvarchar](8) NOT NULL ,) --将查询结果集(多条数据)插入临时表insert into #t select * from ST_User--不能这样插入--select * into #t from dbo.ST_User --添加一列,为int型自增长子段alter table #t add [myid] int NOT NULL IDENTITY(1,1)--添加一列,默认填充全球唯一标识alter table #t add [myid1] uniqueidentifier NOT NULL default (newid()) select * from #tdrop table #t--给查询结果集增加自增长列 --无主键时:select IDENTITY( int ,1,1) as ID, Name ,[Login],[ Password ] into #t from ST_Userselect * from #t --有主键时:select ( select SUM (1) from ST_User where ID= a.ID) as myID,* from ST_User a order by myID--定义表变量declare @t table(   id int not null ,   msg nvarchar(50) null)insert into @t values (1, '1' )insert into @t values (2, '2' )select * from @t

三、循环

--while循环计算1到100的和declare @a intdeclare @ sum intset @a=1set @ sum =0while @a=100begin   set @ sum +=@a   set @a+=1endprint @ sum

四、条件语句

--if,else条件分支if(1+1=2)begin   print '对'endelsebegin   print '错'end --when then条件分支declare @today intdeclare @week nvarchar(3)set @today=3set @week= case   when @today=1 then '星期一'   when @today=2 then '星期二'   when @today=3 then '星期三'   when @today=4 then '星期四'   when @today=5 then '星期五'   when @today=6 then '星期六'   when @today=7 then '星期日'   else '值错误'endprint @week 

五、游标

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
declare @ID intdeclare @Oid intdeclare @Login varchar (50) --定义一个游标declare user_cur cursor for select ID,Oid,[Login] from ST_User--打开游标open user_curwhile @@fetch_status=0begin--读取游标   fetch next from user_cur into @ID,@Oid,@Login   print @ID   --print @Loginendclose user_cur--摧毁游标deallocate user_cur

五、游标

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
declare @ID intdeclare @Oid intdeclare @Login varchar (50) --定义一个游标declare user_cur cursor for select ID,Oid,[Login] from ST_User--打开游标open user_curwhile @@fetch_status=0begin--读取游标   fetch next from user_cur into @ID,@Oid,@Login   print @ID   --print @Loginendclose user_cur--摧毁游标deallocate user_cur

六、触发器

  触发器中的临时表:
  Inserted
  存放进行insert和update 操作后的数据
  Deleted
  存放进行delete 和update操作前的数据

--创建触发器Create trigger User_OnUpdateOn ST_Userfor Update Asdeclare @msg nvarchar(50)   --@msg记录修改情况   select @msg = N '姓名从“' + Deleted. Name + N '”修改为“' + Inserted. Name + '”' from Inserted,Deleted   --插入日志表   insert into [LOG](MSG) values (@msg)   --删除触发器drop trigger User_OnUpdate

七、存储过程

--创建带output参数的存储过程CREATE PROCEDURE PR_Sum   @a int ,   @b int ,   @ sum int outputASBEGIN   set @ sum =@a+@bEND --创建Return返回值存储过程CREATE PROCEDURE PR_Sum2   @a int ,   @b intASBEGIN   Return @a+@bEND   --执行存储过程获取output型返回值declare @mysum intexecute PR_Sum 1,2,@mysum outputprint @mysum --执行存储过程获取Return型返回值declare @mysum2 intexecute @mysum2= PR_Sum2 1,2print @mysum2

八、自定义函数

  函数的分类:
    1)标量值函数
    2)表值函数
        a:内联表值函数
        b:多语句表值函数
    3)系统函数

--新建标量值函数create function FUNC_Sum1(   @a int ,   @b int)returns intasbegin   return @a+@bend --新建内联表值函数create function FUNC_UserTab_1(   @myId int)returns tableasreturn ( select * from ST_User where ID@myId) --新建多语句表值函数create function FUNC_UserTab_2(   @myId int)returns @t table(   [ID] [ int ] NOT NULL ,   [Oid] [ int ] NOT NULL ,   [Login] [nvarchar](50) NOT NULL ,   [Rtx] [nvarchar](4) NOT NULL ,   [ Name ] [nvarchar](5) NOT NULL ,   [ Password ] [nvarchar]( max ) NULL ,   [State] [nvarchar](8) NOT NULL)asbegin   insert into @t select * from ST_User where ID@myId   returnend --调用表值函数select * from dbo.FUNC_UserTab_1(15)--调用标量值函数declare @s intset @s=dbo.FUNC_Sum1(100,50)print @s --删除标量值函数drop function FUNC_Sum1
展开更多 50%)
分享

猜你喜欢

SQL Server 2008 存储过程示例

编程语言 网络编程
SQL Server 2008 存储过程示例

Java中调用SQL Server存储过程示例

编程语言 网络编程
Java中调用SQL Server存储过程示例

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

SQL Server 存储过程解析

编程语言 网络编程
SQL Server 存储过程解析

SQL server 2000存储过程

SQLServer
SQL server 2000存储过程

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

修改SQL SERVER内置存储过程

SQLServer
修改SQL SERVER内置存储过程

SQL Server 存储过程的分页

ASP
SQL Server 存储过程的分页

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

服务器安全设置的几个注册表设置

服务器安全设置的几个注册表设置

SQL Server 数据库安全管理介绍

SQL Server 数据库安全管理介绍
下拉加载更多内容 ↓