• sql(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

    六、触发器

      触发器中的临时表:

      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

    谈谈自定义函数与存储过程的区别:

    一、自定义函数:

      1. 可以返回表变量

      2. 限制颇多,包括

        不能使用output参数;

        不能用临时表;

        函数内部的操作不能影响到外部环境;

        不能通过select返回结果集;

        不能update,delete,数据库表;

      3. 必须return 一个标量值或表变量

      自定义函数一般用在复用度高,功能简单单一,争对性强的地方。

    二、存储过程

      1. 不能返回表变量

      2. 限制少,可以执行对数据库表的操作,可以返回数据集

      3. 可以return一个标量值,也可以省略return

       存储过程一般用在实现复杂的功能,数据操纵方面。

  • 相关阅读:
    UVa 1151 Buy or Build【最小生成树】
    UVa 216 Getting in Line【枚举排列】
    UVa 729 The Hamming Distance Problem【枚举排列】
    HDU 5214 Movie【贪心】
    HDU 5223 GCD
    POJ 1144 Network【割顶】
    UVa 11025 The broken pedometer【枚举子集】
    HDU 2515 Yanghee 的算术【找规律】
    Java基本语法
    Java环境变量,jdk和jre的区别,面向对象语言编程
  • 原文地址:https://www.cnblogs.com/iwenwen/p/3128041.html
Copyright © 2020-2023  润新知