手机
当前位置:查字典教程网 >编程开发 >mssql数据库 >SQL Server 2008 存储过程示例
SQL Server 2008 存储过程示例
摘要:--有输入参数的存储过程--createprocGetComment(@commentidint)asselect*fromCommentw...

--有输入参数的存储过程-- create proc GetComment (@commentid int) as select * from Comment where CommentID=@commentid --有输入与输出参数的存储过程-- create proc GetCommentCount @newsid int, @count int output as select @count=count(*) from Comment where NewsID=@newsid --返回单个值的函数-- create function MyFunction (@newsid int) returns int as begin declare @count int select @count=count(*) from Comment where NewsID=@newsid return @count end --调用方法-- declare @count int exec @count=MyFunction 2 print @count --返回值为表的函数-- Create function GetFunctionTable (@newsid int) returns table as return (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 int set @a=5 print @a --使用select语句赋值 declare @user1 nvarchar(50) select @user1= '张三' print @user1 declare @user2 nvarchar(50) select @user2 = Name from ST_User where ID=1 print @user2 --使用update语句赋值 declare @user3 nvarchar(50) update ST_User set @user3 = Name where ID=1 print @user3

二、表、临时表、表变量

--创建临时表1 create 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 ID<8 --查询并联合两临时表 select * from #DU_User2 where ID<3 union select * from #DU_User1 --删除两临时表 drop table #DU_User1 drop 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 #t drop table #t --给查询结果集增加自增长列 --无主键时: select IDENTITY( int ,1,1) as ID, Name ,[Login],[ Password ] into #t from ST_User select * 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 int declare @ sum int set @a=1 set @ sum =0 while @a<=100 begin set @ sum +=@a set @a+=1 end print @ sum

四、条件语句

--if,else条件分支 if(1+1=2) begin print '对' end else begin print '错' end --when then条件分支 declare @today int declare @week nvarchar(3) set @today=3 set @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 '值错误' end print @week

五、游标

declare @ID int declare @Oid int declare @Login varchar (50) --定义一个游标 declare user_cur cursor for select ID,Oid,[Login] from ST_User --打开游标 open user_cur while @@fetch_status=0 begin --读取游标 fetch next from user_cur into @ID,@Oid,@Login print @ID --print @Login end close user_cur --摧毁游标 deallocate user_cur

五、游标

declare @ID int declare @Oid int declare @Login varchar (50) --定义一个游标 declare user_cur cursor for select ID,Oid,[Login] from ST_User --打开游标 open user_cur while @@fetch_status=0 begin --读取游标 fetch next from user_cur into @ID,@Oid,@Login print @ID --print @Login end close user_cur --摧毁游标 deallocate user_cur

六、触发器

触发器中的临时表:

Inserted

存放进行insert和update 操作后的数据

Deleted

存放进行delete 和update操作前的数据

--创建触发器 Create trigger User_OnUpdate On ST_User for Update As declare @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 output AS BEGIN set @ sum =@a+@b END --创建Return返回值存储过程 CREATE PROCEDURE PR_Sum2 @a int , @b int AS BEGIN Return @a+@b END --执行存储过程获取output型返回值 declare @mysum int execute PR_Sum 1,2,@mysum output print @mysum --执行存储过程获取Return型返回值 declare @mysum2 int execute @mysum2= PR_Sum2 1,2 print @mysum2

八、自定义函数

函数的分类:

1)标量值函数

2)表值函数

a:内联表值函数

b:多语句表值函数

3)系统函数

--新建标量值函数 create function FUNC_Sum1 ( @a int , @b int ) returns int as begin return @a+@b end --新建内联表值函数 create function FUNC_UserTab_1 ( @myId int ) returns table as return ( 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 ) as begin insert into @t select * from ST_User where ID<@myId return end --调用表值函数 select * from dbo.FUNC_UserTab_1(15) --调用标量值函数 declare @s int set @s=dbo.FUNC_Sum1(100,50) print @s --删除标量值函数 drop function FUNC_Sum1

【SQL Server 2008 存储过程示例】相关文章:

SqlServer 2005的排名函数使用小结

SQL Server 2008 维护计划实现数据库备份心得

SQL Server 2005通用分页存储过程及多表联接应用

简单实用SQL脚本Part SQLServer 2005 链接服务器

SQL Server2005 异地备份的多种方法

SQL Server 2005中的外联结用法

SQLServer2008的实用小道具 merger使用介绍

SQL Server 存储过程解析

SQLServer 2005 列所有存储过程的语句

SQL Server还原数据库操作

精品推荐
分类导航