• 爱情文章
  • 亲情文章
  • 友情文章
  • 生活随笔
  • 校园文章
  • 经典文章
  • 人生哲理
  • 励志文章
  • 搞笑文章
  • 心情日记
  • 英语文章
  • 范文大全
  • 作文大全
  • 新闻阅读
  • 当前位置: 山茶花美文网 > 英语文章 > 正文

    数据库2008安装教程 SQL,Server,2008,数据库教程

    时间:2020-04-29来源:山茶花美文网 本文已影响 山茶花美文网手机站

    --有输入参数的存储过程--

    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

    --查询并联合两临时表

    select * from #DU_User2 where ID

    --删除两临时表

    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 @a100

    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

    • 爱情文章
    • 亲情文章
    • 友情文章
    • 随笔
    • 哲理
    • 励志
    • 范文大全