广

MSSQL

  • MYSQL
  • MSSQL
  • Redis
  • MongoDB
  • oracle数据库
  • 数据管理

    SQL Server 2005基础知识详细整理

    2018-05-07 10:24:22 次阅读 稿源:互联网
    零七网广告
    全网推广平台,软文发布

    1. ACID:指数据库事务正确执行的四个基本要素缩写:
    1.原子性2.一致性3.隔离性4.持久性

    2.数据库对象:表(table) 视图(view) 存储过程(stored procedure) 函数(function)索引(index)

    3.SQL Server 2005中包含master、model、msdb、tempdb四个系统数据库。

    4.使用T-SQL语句创建数据库:
    CREATE DATABASE [ApressFinacial] ON  PRIMARY
    ( NAME = N'ApressFinacial', FILENAME = N'I:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/DATA/ApressFinacial.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB )
    LOG ON
    ( NAME = N'ApressFinacial_log', FILENAME = N'I:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/DATA/ApressFinacial_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)

    5.T-SQL语句删除数据库:drop database[数据库名]

    6.常见的约束类型:主键约束、唯一约束、检查约束、默认约束、外键约束。

    7.添加约束的语法:
             Alter table 表名
             Add  constraint  约束名 约束类型 具体的约束说明

    8.删除约束:alter table 表名
                Drop constraint 约束名

    9.授权语法:  grant 权限[on  表名] to 数据库用户
             例:grant  select  insert  update
                  On students  to  zhangsan

    10.T-SQL语句创建登录名:
               Create  login[yuan]
                With  password='130125'
                Go

    11.数据库完整性分为:实体完整性、域完整性、参照完整性、用户自定义完整性。

    12.T-SQL 中的运算符:
    运算符
     含义

    =
     等于

    >
     大于

    <
     小于

    >=
     大于等于

    <=
     小于等于

    <>
     不等于

    !
     非

    通配符
     解释
     示例

    _
     一个字符
     A Like 'C_'

    %
     任意长度的字符
     B Like 'CO_%'

    []
     括号中所指定范围内的一个字符
     C Like '9W0[1-2]'

    [^]
     不在括号中所指定范围内的一个字符
     D Like '%[A-Z][^1-2]'

    13.查询语句:select 列名  from 表名  where 条件   如:select*  from students  where       no=1

    14.插入数据行:insert  [into]<表名> [列名]values<值列表>
           例:intset into students(name,address,grade,email,sex)
               Values('长青菜','上海松江',5,'zqc@souhu.com','男')
          注意:(不能为标识列指定值,因为它的数字是自动增长的)

    15.更新数据行:update <表名> set<列名=更新值>    [where<更新条件>]
          例:update  students
              Set  address='石家庄'
              Where   address='保定'

    16.删除数据行:  delete  from<表名>[where<删除条件>]
           例:delete from  studentinfo     where  no='180108225'

    17.问题:如果标识列A的初始值为1,增长量为2,则输入三行数据以后,再删除两行,下次再输入数据行的时候,标识值从多少开始?      (  7  )

    18.删除列: alter  table  student     drop  column  address

    19.Exists:     if  exists (select*from?where  name='yuanDB')  drop  database stuDB

    20.变量:   局部变量(必须以标记@作为前缀)
                全局变量(必须以标记@@作为前缀)
           全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值。

    21.局部变量声明:  例:Decalre  @name  vachar(8)      decare @seat  int
       赋值:set @变量名=值或select@变量名=值  set @name='张三'
               Select @name=sname  from  students  where  no='1'

    22.逻辑控制语句: IF-ELSE语句
                If(条件)
                  Begin
                  语句1
                  语句2...........
                  End
                Else
                Begin
                语句1
                语句2.........
                End        注:else是可选的。

    例: decalre @myavg float
         Select @myavg =AVG(course) from score
         Print'平均分'+convert(varchar(5),@myavg)
         If(@myavg>70)
         Begin
         Print '本班成绩优秀,前三名成绩为:'
          Select  top 3 * from  score  order  by score  desc
          End
          Else
            Begin
            Print  '本班成绩较差,后三名成绩为:'
            Select  top 3 *from  score  order  by  score
           End

    23.while循环语句:   while(条件)
                         Begin
                         语句1
                         语句2..........
                         Break
                         End
           例:DECLARE @n int
               WHILE(1=1) --条件永远成立
               BEGIN
               SELECT @n=COUNT(*) FROM score
               WHERE score<60    --统计不及格人数
               IF (@n>0)
               UPDATE score     --每人加2分
                SET score=score+2
              ELSE
              BREAK    --退出循环
              END
              print '加分后的成绩如下:'
              SELECT * FROM score

    24.case--end多分支语句
          语法:    case
                    When  条件1  then  结果1
                    When  条件2  then  结果2
                    ..............
                     Else  其他结果
                     End
           例:print  'ABCDE五级显示成绩如下:'
               Select  studentID,
                   成绩=case
                            When  score<60  then'E'
                            When   score  between  60  and  69  then 'D'
                            When   score  between  70  and  79  then 'C'
                             Else  'A'
                          End
                         From  score

    25.批处理语句示例:
                       SELECT * FROM stuInfo
                       SELECT * FROM stuMarks
                       UPDATE stuMarks
                          SET writtenExam=writtenExam+2
                       GO

    26.习题及答案:   
            习题内容:则根据如下规则对成绩进行反复加分,直到平均分超过85分为止。请编写T-SQL语句实现。
    90分以上:   不加分
    80-89分:   加1分
    70-79分:   加2分
    60-69分:   加3分
    60分以下:   加5分
    习题答案:
    SELECT * FROM score --原始成绩
    DECLARE @labAvg  int
    WHILE(1=1)
     BEGIN
        UPDATE score
          SET score=
            CASE
                WHEN score<60 THEN score+5
                WHEN score between 60 AND 69 THEN score+3
                WHEN score between 70 AND 79 THEN score+2
                WHEN score between 80 AND 89 THEN score+1
                ELSE score
            END
         SELECT @labAvg=AVG(score) FROM score
           IF  @labAvg>=85
               BREAK
     END
    SELECT * FROM score --加分后的成绩

    27.把一个表中的数据复制到另一个表中:  insert  into <表名>(列名)
                                           Select  <列名>
                                           From <源表名>

    28.把查询结果放在新表中同时插入新的标识列:
               Select  列名  identity(数据类型,标识种子,标识增长量)as
                列名  into  新表    from  原始表
      例:   select   students.sname, students.saddress,  students.semail,  identity(int,1,1) as  studentID    into  tongxunlu    from students

    29.更新数据行: 
          语法:  update<表名>
                  Set<列名=更新值>
                  Where <更新条件>
           例: update  students
                 Set   address='软件学校'
                  Where  address='软件学院'

    30.问题:按多列排序:例:select  no,name,address,grade
                       From   students
                       Where   sex  in(1,0)
                       Order by   no,grade

    31.字符串函数:
          Replace:    select  replace('莫勒可切.杨可','可',‘兰')
              返回结果:莫勒兰切.杨兰
          Upper:    select  upper('sql server 课程')
           返回结果:SQL SERVER 课程
          Getdate:   select  getdate()获取当前时间。
           Dateadd:   select  dateadd(mm,4,'01/01/2009')
            返回结果:05/01/2009
          Datename:     select  datename(dw,'01/15/2000')
           返回结果:   Saturday

    32.聚合函数:
    Max-min:     select  AVG(score) as  平均成绩,MAX(score) as 最高分,MIN(score) as最低分       from  score          where  score>=60
    Count:    select  count(*)as  及格人数      from  score 
                          Where   score>=60

    33. 分组查询:
    代码如下:

    select  courseid,avg(score) as 课程平均成绩
                    From  score
                    Group  by  courseid

    34.习题:  
    假如成绩单中记录了学生的几次考试成绩,要查询每位学生的每门课的总成绩,怎么查?
    代码如下:

    Select  courseid,studentid,sum(score) as 总成绩
                    From  score
                    Group  by  courseid,studentid

    35.分组查询--HAVING
    Having:指定了组或聚合的搜索条件,常常与group by子句一起使用。
    例:
    代码如下:

    select  studentid  as学员编号,avg(score)as 平均成绩
                      From   score
                      Group  by  studentid,couseid
                      Having  avg(score)>60

    36.多表查询——内联结    
    例:
    代码如下:

    select  students.smame, score.courseid, score.score
                                  From  students,score
                                  Where  students.scode=score.studentid

    37.多表联结——三表联结    
    例:
    代码如下:

    select  S.name  as姓名,CS.coursename as课程,C.score as 成绩                         from  students  As S
                                    Inner Join score  as C  ON(S.scode=C.studentid)
                                    Inner join  course  As CS  ON(CS.courseid=C.courseid)

    38.多表联结查询——右外联结  
    例:
    代码如下:

    select  titles.title_id,Titles.title,publishers.pub_name
                   From  titles
                   Right outer  join  publishers
                   On  titles.pub_id=publishers.pub_id

    39.银行案例——多表联结——左外联结:
     例:
     代码如下:

      intsert  into  account(account.Cardid,account.score)
                    Select  users.cardid,2
                    From users
                    Left  Join account  ON(account.cardid=users.cardid)
                    Where  account.cardid  is NULL
     
    40.子查询: 
    例:
    代码如下:

    select * from  students
                     Where  scode>(select  scode  from  students  where  Sname='张扬') 
                     GO

    41.例:内联结(等值联结)
    代码如下:

    select  sname  from  students
                               Inner  Join  score
                               ON  students.scode=score.studentid
                               Where  score=60
          GO

    42.局部变量:
    例:将姓名为里斯的学生的学号,出生日期和平均成绩分别赋给局部变量
    @no_str @birthday_str @avgrade_num  (用select语句来实现)
    代码如下:

                 Select  @no_str=s_no,@birthday_str=s_birthday,@avgrade_num=s_avgrade
                  From student          where  s_name='里斯'

    43.自连接查询:    
    例:(注:student2为不存在,是创建的)
    代码如下:

                   Select  student2.sno学号,student2.sname姓名,student2.ssex性别,student2.sspeciality专业,student2.savgrade平均成绩
                   From student,student2
                   Where  student.sname='李好' and student.sspeciality=student2.sspeciality

    44.声明局部变量:declare  @变量名  数据类型

    45.if语句 例:查询学号为457865的学生,如果成绩及格,则打印其姓名和成绩。
    代码如下:

             Declare @no,char(8),@name char(8),@avgrade numeric(3,1)
             Set @no='457865'
             Select @name=sname,@avgrade=savgrade
             From student
             Where sno=@no;
             If @avgrade>60.0
             Begin
             Print @name
             Print @avgrade
             End
             Go

    46.if-else语句:对于给定学号的查询,如果平均成绩不及格则打印姓名和平均成绩,否则打印学号。
    代码如下:

              Declare @no char(8),@name char(8),@avgrade numeric(3,1);
              Set @no='567';
              Select @name=sname,@avgrade=savgrade
              From student
              Where  sno=@no;
              If @avgrade<60.0
              Begin
              Print @name
              Print @avgrade
              End
              Else
              Print @no
              Go

    47.多分支的if语句查询并实现分等级打印学生成绩
    代码如下:

              Declare @no char(8),@name char(8),@avgrade numeric(3,1);
              Set @no='567';
              Select @name=sname,@avgrade=savgrade
              From student
              Where  sno=@no;
              If @avgrade>=90.0
              Print ‘优秀'
              Else if @avgrade>=80.0
              …………….
              Else print ‘不及格'
              Go

    48.case 语句   使用select语句查询学生的学号,然后用case函数对学生的姓名和爱好进行简要说明。    Select  学号=sno,姓名及爱好=
                  Case sno
                  When ‘123' then ‘李好,游泳'
                  。。。。。。。
                  Else ‘没有这人'
                  End
                  From  student

    49.while语句
          (如果学生平均成绩低于85分,则循环执行对每位学生成绩加0.5%,在循环过程中,如果最高成绩超过95分则退出循环;在加分过程中,当成绩的平均成绩大于或等于80分时打印出当前成绩的平均成绩)
    代码如下:

         Declare @avgrade numeric(3,1);
                Set @avgrade=(select  avg(savgrade) from student)
                While @avgrade<85
                 Begin
                          Update student
                            Set savgrade=savgrade+savgrade*0.005
                          Set @avgrade=(select avg(savgrade) from student)
                          If @avgrade>95
                             Break                            --退出循环
                          if@avgrade<80
                          continue                             --结束本次循环
                          print @avgrade
                          End

    50.子查询:查询成绩刚好通过60分的学生
                  Select sname from students
                      Inner  Join  score                ---内连接
                       ON students.scode=score.studentid
                       Where  score=60
                        Go

    51.事务的特性:原子性、一致性、隔离性、永久性。
      事务分类:显示事务、隐性事务、自动提交事务。

    52.系统存储过程的名称都以“sp_”开头或“xp_”开头。
            EXEC sp_databases     列出当前系统的数据库
            EXEC sp_help students  查看表students的信息

    53.定义存储过程的语法:  
                 Create  proc[edure]  存储过程名
                  @参数1  数据类型=默认值 output,
                   ...................
                  @参数n  数据类型=默认值 output
                  As
                  SQL语句
                  Go (注:参数可选,参数分输入参数、输出参数,输入参数允许有默认值)

    54.创建不带参数的存储过程:    
    例:
    代码如下:

               Creat  procedure  pro_stu
               As
               Declare  @myAvg float
               Select  @myAvg=AVG(score)
               From score
               Print '平均分:'+convert(varchar(5),@myAvg)
               If(@myAvg>70)
                  Print '本班考试成绩:优秀'
                Else
                   Print '本班考试成绩:较差'
                Print '-----------------------------------------------------------'
                Print '参加本次考试没有通过的学员:'
                   Select  name,scode,score
                       From students inner Join score  on
                       Students.scode=score.studentid     where  score<60
         GO

    55.调用存储过程:   语法:   EXEC  过程名[参数]    例:EXEC proc_stu 

    56.输入参数的默认值:    
    例:
    代码如下:

             Create procedure  proc_stuMn
                @scorePass  int=60        ---及格线默认为60分
             As
                Print '及格线:' +convert(varchar(5),@scorePass)
                Print '参加本次考试没有通过的学员:'
              Select  name,scode,score
                    From students
                    Inner Join score
                    On students.scode=score.studentid
                     Where score<@scorePass
             Go

    57.调用带参数默认值的存储过程: 
                 EXEC proc_stu    -------采用默认值
                 EXEC proc_stu 55    ------不采用默认值
                 EXEC proc_stu  @scorePass=55

    58.带输出参数的存储过程:
    代码如下:

            Create procedure proc_stuM
            @notpassSum  int  output,
            @scorePass  int=60
            As 
               Print'及格线:'+convert(varchar(5),@scorePass)
               Print '参加本次考试没有通过的学员:'
            Select  name,scode,score      from  students
                  Inner Join score  On   students.scode=score.studentid
                       Where  score<@scorePass
             Select @notpassSum=count(studentid)
                   From score where score<@scorePass
             GO

    59.调用带输出参数的存储过程:(注:调用时必须带output关键字,返回结果将存放在变量@sum 中)
    代码如下:

        Declare @sum int
               EXEC proc_stuM @sum output,60
               Print '--------------------------------------------------'
               If @sum>=3
                     Print '未通过人数:'+convert(varchar(5),@sum )+'人,超过60%,及格分数线还应下调'
               Else
                      Print '未通过人数:'+convert(varchar(5),@sum )+'人,已控制在60%以下,及格分数线适中'          
               GO

    60.错误处理:  
    使用Raiserror语句:
    代码如下:

               Create  procedure  pro_stuM
                      @notpassSum  int output,
                      @scorePass  int=60
                As
                   If(not  @scorePass  between 0 and 100)
                       Begin
                       Raiserror('及格线错误,请指定0—100之间的分数,统计中断退出',16,1) --------引发系统错误,指定错误的严重级别16,调用状态为1(默认),并影响@@ERROR 系统变量的值
                       Return   --------立即返回,退出存储过程
                 End
                   ...............其他语句同上例
                 Go

    61.使用raiserror语句
    代码如下:

              Declare  @sum int,@t int
              EXEC proc_stum @sum  output, 604   ----笔试及格线误输入604分
              Set @t=@@error
              Print '错误号:'+convert(varchar(5),@t )
              If @t<>o
              Return   ------退出批处理,后续语句不再执行
              Print '-----------------------------------'      -----如果执行了raiseerror语句,系统全局@@error 将不等于0,表示出现了错误.
               If @sum>=3
                 Print '未通过人数:'+convert(varchar(5),@sum)+'人,超过了60%,及格分数线还应下调'
               Else   print '未通过人数:'+convert(varchar(5),@sum)+'人,已控制在60%以下,及格分数线适中'              GO

    62.调用存储过程:         
    例:
    代码如下:

                   Declare  @s  int
                   Exec proc_stuinfo  '张三' ,@s , 30    ———错误!应为(exec proc_stuinfo '张三',@s  output,30)
                    Exec proc_stuinfo '张三' ,@s     ————错误!应为(exec proc_stuinfo '张三',@s output)
                    Exec proc_stuinfo  @sAge=22,@stuName='李四',@m=@s output(正确!)


    63.带输出参数的存储过程:  
    例:
    代码如下:

               Declare @sum  int
               Exec proc_stuM @sum  output,60
               Print '-----------------------------------------'
               If  @sum>=3
                  Print'未通过人数:'+convert(varchar(5),@sum )+'人,超过60%,及格分数线还应下调'
               Else 
                   Print'未通过人数:'+convert(varchar(5),@sum )+'人,已控制在60…60%以下,及格分数线适中'       GO

    64.创建触发器语法:   
    代码如下:

    Create  trigger  trigger_name
                           On  table_name
                           [with  encryption] --------表示加密触发器定义的SQL文本
                           For [delete,insert,update]    -------指定触发器类型
                           As
                             T_SQL语句
                           GO   

    65.Insert 触发器  
    例:
    代码如下:

           Create trigger  trig_transInfo
           On  transInfo
            For  insert
            As
            Declare  @type  char(4),@outMoney  Money
            Declare  @myCardID  char(10),@balance  Money
            Declare  @currentMoney  money
            Select  @type=transType,@outMoney=transMoney,@myCardID=cardID from inserted
                  If(@type='支取')
                       Update  bank  set  currentMoney=currentMoney-@outMoney
                       Where  cardID=@myCardID
                  Else 
                       Update  bank  set  currentMoney=currentMoney+@outMoney
                       Where  cardID=@myCardID

    66. 插入一条语句    
    例:
    代码如下:

              Insert  into  transInfo(transType,transMoney,cardID)
              Values ('支取',200,'10011001')

    67. Delete触发器示例:
                Create  trigger  tri_delete_transInfo
                On  transInfo
                For  delete
                As
                    Print '开始备份数据,请稍候......'
                    If  not  exists(select * from  sysobjects  where  name='backupTable')
                    Select * into backupTable  from  deleted        ------------从deleted表中获取被删除的交易记录。
                     Else
                        Insert  into backupTable  select * from  deleted
                        Print '备份数据成功,备份表中的数据为:'
                        Select * from  backupTable
                        Select * from  transInfo
                    GO   

    68. Update 触发器:
    代码如下:

                Create  trigger  trig_update_bank
                On  bank
                For  update
                As 
                    Declare  @beforeMoney  Money,@afterMoney  Money
                    Select  @beforeMoney=currentMoney  from  deleted   -------(从deleted表中获取交易前的金额,从inserted表中获取交易后的余额)
                    Select  @afterMoney=currentMoney  from  inserted  
                    If  ABS(@afterMoney-@beforeMoney)>20000 ------交易金额是否>2万
                           Begin
                              Print '交易金额:'+convert(varchar(8),
                              ABS(@afterMoney-@beforeMoney))
                            Raiserror ('每笔交易不能超过2万元,交易失败',16,1)
                            Rollback  transaction         ------------回滚事务,撤销交易
                            End
                Go

    69. 列级update触发器
    代码如下:

             Create  trigger  trig_update_transIfo
             ON  transInfo
             For  update
             As
                 If  update(transDate)
                 Begin                -------检查是否修改了交易日期列transDate
                 Print  '交易失败......'
                 Raiserror('安全警告:交易日期不能修改,由系统自动产生',16,1)
                 Rollback  transaction          ----------回滚事务,撤销交易
                 End
             GO

    70.数据库阶段数据管理的主要特点:1.采用数据模型表示复杂的数据结构;2.有较高的数据独立性;3.为用户提供了方便的用户接口;4.提供数据控制功能;5.增加系统 的灵活性。

    71.   DB(数据库):存储在计算机内有组织的、统一管理的相关数据的集合。
      DBMS(数据库管理系统):位于用户与操作系统之间的数据管理软件。
      DBS(数据库系统):是实现有组织的、动态的存储大量关联数据,以方便用户访问计算就硬件、软件和株距资源组成的计算机系统。

    72.物理数据独立性和逻辑数据独立性:
           物理数据独立性:内模式的修改,只需对模式/内模式映象做相应修改,而不需修改        概念模式。逻辑数据独立性:概念模式的修改,只需对外模式/模式映象做相应修改,而不
    需修改外模式。

    73.  DBMS的主要功能:
            数据定义(DDL):三级结构、两级映象、完整性约束等。数据操纵(DML):检索、更新。数据保护:数据恢复、并发控制、完整性控制、安全性控制等。数据维护:数据载入、转换、存储、、性能监控等。数据字典(DD):存储三级结构定义的数据库称为DD,即系统数据库。DBMS主要功能:数据库定义功能、数据存取功能、数据库运行管理功能、数据库的建立和维护功能。

    74.--1、创建存储过程--
    代码如下:

    if exists (select * from sysobjects where name='Sum_wage')
    drop procedure Sum_wage
    GO
    create procedure Sum_wage
    @PWage int,
    @AWage int,
    @total int
    as
    while (1=1)
    begin
    if (select count(*) from ProWage)>2*(select count(*) from ProWage where Wage>=@PWage)
    update ProWage set @total=@total+@AWage,Wage=Wage+@AWage
    else
    break
    end
    print'一共加薪:'+convert(varchar,@total)+'元'
    print'加薪后的程序员工资列表:'
    select * from ProWage
    --调用存储过程1--
    exec Sum_wage @PWage=2000,@AWage=100,@total=0
    exec Sum_wage @PWage=2200,@AWage=100,@total=0
    exec Sum_wage @PWage=3000,@AWage=100,@total=0
    exec Sum_wage @PWage=4000,@AWage=100,@total=0
    exec Sum_wage @PWage=5000,@AWage=100,@total=0
    exec Sum_wage @PWage=6000,@AWage=100,@total=0

    75.
    代码如下:

    if exists (select * from sysobjects where name='Avg_wage')
    drop procedure Avg_wage
    GO
    create procedure Avg_wage
    @PWage int,
    @AWage int,
    @total int
    as
    while (1=1)
    begin
    if ((select Avg(Wage) from ProWage)<=@PWage)
    update ProWage set @total=@total+@AWage,Wage=Wage+@AWage
    else
    break
    end
    print'一共加薪:'+convert(varchar,@total)+'元'
    print'加薪后的程序员工资列表:'
    select * from ProWage
    --调用存储过程--
    exec Avg_wage @PWage=3000,@AWage=200,@total=0
    exec Avg_wage @PWage=4500,@AWage=200,@total=0

    76.代码:
    代码如下:

    INSERT INTO studentinformation(S_name,S_no,S_grade,S_address)
    VALUES('花无影',25,'软件0802班','河北')

    select studentinformation.S_name,studentinformation.S_no
    into information2
    from studentinformation
    select S_no,S_grade,S_name
    from studentinformation
    where S_school='软件学院'
    order by S_no
    select S_no,S_name,S_class
    from studentinformation
    where S_sex='男'and S_name<>'花无影'
    order by S_no
    SELECT top 20 percent sname as 姓名,sno as 学号,saddress as 地址
    FROM  yuan
    WHERE  sschool ='软件学院'
    ORDER BY  sno asc,sname desc
    select charindex('data','my data is set',1)    (data的索引位置)
    select len('java xuexibiji')      (字符串长度)
    select lower('BAO DING DIANLI ZHI YE JI SHU XUE YUAN')   (转换成小写)
    select replace('软件学院','软件学院','软件工程学院')  (替换)
    select stuff('a b c d e f g h i j k l m n',3,6,'今天的学习内容')   (从第三字符个开始替换,替换6个字符)
    select getdate()   (当前日期)
    select dateadd(dd,250,'04/12/2009')   (250天后的日期)
    select datediff(mm,'04/20/2005','08/05/2010')   (相差的月数)
    select datename(dw,'04/12/2009')    (返回星期几)
    select datepart(dd,'04/12/2009')    (返回当天是几号)
    select abs(-10)   绝对值
    select ceiling(-32.8)    返回大于或等于该数的最小整数
    select power(102,3)   取数值表达式的幂值
    select round(3.141592653,4)     (?)将数值表达式四舍五入成指定精度
    select sign(1000)   正数返回1,负数返回-1,0返回0.
    select sqrt(6.25)      //返回该数据的平方根
    select convert(varchar(100),45678932) //转变数据类型 
    select current_user      //返回当前用户的名字
    select datalength('软件学院')    //返回字符长度
    select host_name()   //返回用户登录的计算机名
    select system_user      //返回登录的用户名
    select user_name(1)     //从任意数据库中返回dbo(jizhu)
    create proc pro_stu
    @scorepass float
    as
    print '学号'+convert(varchar(5),@scorepass)
    select name
    from stuent
    where student.score=@scorepass
    go
    exec pro_stu @scorepass=85

    76.导出SQL Server数据库中数据:
    代码如下:

    declare @objectId int
    set @objectId=object_id('sun')
    if @objectId is not null
    begin
        drop proc sun
    end
    go
    create proc sun (@tablename varchar(256))
    as
    begin
        set nocount on
        declare @sqlstr varchar(4000)
        declare @sqlstr1 varchar(4000)
        declare @sqlstr2 varchar(4000)
        select @sqlstr='select ''insert '+@tablename
        select @sqlstr1=''
        select @sqlstr2='('
        select @sqlstr1='values (''+'
        select @sqlstr1=@sqlstr1+col+'+'',''+' ,@sqlstr2=@sqlstr2+name +',' from (select case
        when a.xtype =173 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'
        when a.xtype =104 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(1),'+a.name +')'+' end'
        when a.xtype =175 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'
        when a.xtype =61 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+ '+'''''''''+' end'
        when a.xtype =106 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end'
        when a.xtype =62 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(23),'+a.name +',2)'+' end'
        when a.xtype =56 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(11),'+a.name +')'+' end'
        when a.xtype =60 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(22),'+a.name +')'+' end'
        when a.xtype =239 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'
        when a.xtype =108 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end'
        when a.xtype =231 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'
        when a.xtype =59 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(23),'+a.name +',2)'+' end'
        when a.xtype =58 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+ '+'''''''''+' end'
        when a.xtype =52 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(12),'+a.name +')'+' end'
        when a.xtype =122 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(22),'+a.name +')'+' end'
        when a.xtype =48 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(6),'+a.name +')'+' end'
        when a.xtype =165 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'
        when a.xtype =167 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'
        else '''NULL'''
        end as col,a.colid,a.name
        from syscolumns a where a.id = object_id(@tablename) and a.xtype <>189 and a.xtype <>34 and a.xtype <>35 and a.xtype <>36
        )t order by colid
        select @sqlstr=@sqlstr+left(@sqlstr2,len(@sqlstr2)-1)+') '+left(@sqlstr1,len(@sqlstr1)-3)+')'' from '+@tablename
        print @sqlstr
        exec( @sqlstr)
        set nocount off
    end
    go

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七网广告
    零七网广告
    零七网广告
    零七网广告