• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    SQL Server 2008 存储过程示例
     
    --有输入参数的存储过程--
    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 ID8
     
    --查询并联合两临时表
    select * from #DU_User2 where ID3 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下轻松调试T-SQL语句和存储过程
    • sqlserver2008查看表记录或者修改存储过程出现目录名无效错误解决方法
    • SQLServer 2008中的代码安全(一) 存储过程加密与安全上下文
    • SQLServer2008存储过程实现数据插入与更新
    • sql server2008调试存储过程的完整步骤
    上一篇:SQL Server 2008 备份数据库、还原数据库的方法
    下一篇:安装sql server 2008时的4个常见错误和解决方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    SQL Server 2008 存储过程示例 SQL,Server,2008,存储,过程,