SQL 细节知识积累

Transact_sql:

  TRUNCATE TABLE test   //用于删除test表中的数据
  CREATE FUNCTION        //创建用户自定义函数
  ALTER FUNCTION         //语句修改
  DROP FUNCTION          //除去用户定义函数
  CREATE UNIQUE CLUSTERED INDEX client_id ON clients(client_id)

sql:
  (1).   group by ... with cube having sum(number)>=40
          下面两语句是为了保持前后兼容
         compute
         compute by
          如果使用COMPUTE BY,则必须也使用ORDER BY子句.
  (2).   JOIN ON 用法
           select book.name,tool.name from book JOIN tool ON (boo.id==tool.id)
         INNER JOIN ON (内联接:用于消除与另一个表中的任何不匹配的行)
           select book.name,tool.name from book JOIN tool ON (boo.id==tool.id)          
         LEFT OUTER JOIN ON (左外联接:)
         FULL OUTER JOIN (完整外部联接:不管另一个表是否有匹配的值,此运算符都包括两个表中所有行)
         CROSS JOIN (交叉连接:显示可能的组合)

  (3).   使用@@ERROR全局变量处理错误:
         SQL Server的所有错误都存储在系统表master.dbo.sysmessages中.用户定义的消息也可以存储在sysmessages中.如果需要,可以使用RAISERROR语句将这些用户定义的错误返回到一个应用程序.若出现一个错误,则返回一条错误信息.
    例子: use test
        drop table text1
        go
        create table text1(c1 int,c2 text)
        exec sp_tableoption 'text1','text in row','on'
        insert text1 values(1,'This is a text.')
        go
        select * from text1
        go
  (4). 检索ntext,text,image
       首先看例题: use test
          go
          create table text1(c1 int,c2 text)
          exec sp_tableoption 'text1','text in row','on'
          insert text1 values('1','This is a text.')
          go
          select * from text1
          go
    有几种方法:
      1.在SELECT语句中引用该列
      2.使用TEXTTPTR函数
      3.使用SUBTRING函数
      4.使用PATINDEX函数
    例题:
      a. exec sp_tableoption 'text1','text in row','off'
         declare @ptrval varbinary(16)
         select @ptrval=TEXTPTR(c2)
            from text1
         READTEXT text1.c2 @ptrval 0 7
      b. select substring(c2,1,7) as c2
         from text1
      c. use text
         go
         select patindex('%a%',c2) as 起始位置
            from text1
         go
 (5).修改ntext,text或image值
     可以使用下面的几种方式来修改:
        1. 使用数据库API函数;
        2. 使用WRITETEXT语句重写该列的整个数据值;
        3. 使用UPDATETEXT语句更新ntext,text或image列的特定数据块.      
   example:
      1. use test
         go
         declare @ptrval varbinary(16)
         exec sp_tableoption 'text1','text in row','off'
         select @ptrval=textptr(c2) from text1
         writetext text1.c2 @ptrval 'This is a modified text.'
         go
         select * from text1
         go
     2.  use text
         go
         declare @ptrval varbinary(16)
         select @ptrval=textptr(c2)
              from text1
         updatetext text1.c2 @ptrval NULL 0 'this is an inserted text.'
         go
         select * from text1
         go
(6).显示事务:需要显示的定义事务的启动和结束.它是通过BEGIN TRANSACTION,COMMIT TRANSACTION,COMMIT WORK,ROLLBACK TRANSACTION,ROLLBACK WORK 等Transact-SQL语句来完成的.
      1.启动事务使用BEGIN TRANSACTION语句.如果遇到错误,以后的语句能自动回滚.
      2.结束事务使用COMMIT TRANSACTION语句.该事务中的所有修改都将永久有效.事务占用的资源被释放.
      3.回滚事务使用ROLLBACK TRANSACTION清除自事务的起点或到某个保存点所有数据修改.ROLLBACK不释放由事务控制的资源.   
      4.保存点使用SAVE TRANSACTION语句.如果有条件地取消事务的一部分,事务可以返回的位置.
   example:
       use bookdb
       go
       begin tran MyTran  --启动事务
       insert into book values(9,'Windows 2000 Professional 看图速成',1,35,'2')
       save tran MySave  --保存点
       delete book where book_id=9  --删除记录
       rollback tran MySave  --回滚事务
       commit tran
       go
       select * from book   
    5. 标记事务用WITH MARK选项使事务名置于事务日志中.将数据库还原到早期状态时,可使用标记事务替代日期和时间.
(7).自动提交事务
(8).自定义锁
    自定义锁超时:
     set lock_timeout 1800
     go
     declare @timeout int
     select @timeout=@@lock_timeout
     print @timeout
     go
    自定义隔离级别:
     use bookdb
     go
     set transaction isolation level serializable
     go
     begin transaction
     select *from book
     go
     dbcc useroptions--(显示当隔离级别) 
     go
    锁定提示:
      use bookdb
      go
      set transaction isolation level serializable
      go
      begin transaction
      select book_name from book with (nolock)
      exec sp_lock --(显示锁定)
      go
     返回数据库被锁定对象
      select object_name(725577623)
      go  
(9)游标
   SQL Server支持四种API服务器游标:
      * 静态游标
      * 动态游标
      * 只进游标
      * 键集驱动游标
    ROWCOUNT返回上次操作影响的行数.
        use bookdb
        go
        set nocount on
        update book set book_name='LINUX教程'
           where book_id=20
        if @@ROWCOUNT=0
            print '没有行被更新!'
        go
     游标示例:
        --声明游标
        declare book_cursor cursor
            for select *from book
        open book_cursor
        --提取一行数据
        fetch next from book_cursor
        close book_cursor
        deallocate book_cursor  
(10)视图
     use bookdb
     go
     create view dbo.book_total
     as
     select abo.book.book_name as 书名,
        abo.book.price as 价格,
        abo.orderform.book_number as 数量,
        abo.book.price*abo.orderform.book_number
           as 总额
      from abo.orderform inner join dbo.book on dbo.orderform.book_id=abo.book.book_id 
      go
    通过视图修改数据 
 use test
        go
 /*如果表Table1存在,则删除*/
 if exists(select table_name from information_schema.tables
            where table_name='Table1')                 
  drop table Table1
 go
 /*如果视图View1存在,则删除*/
 if exists(select table_name from information_schema.views
       where table_name='View1')
         drop view View1
 go
 /*创建表Table1*/
 create table Table1(column_1 int,column_2 varchar(30))
  go
 /*创建视图View1*/
 create view View1 as select column_2,column_1
 from Table1
 go
 /*通过视图View1插入一笔记录*/
 insert into View1 values('Row1',1)
 /*检查结果*/
 select * from Table1 

阅读更多
换一批

没有更多推荐了,返回首页