佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > SQL Server 2005基礎(chǔ)知識詳細整理

SQL Server 2005基礎(chǔ)知識詳細整理

熱門標簽:AI電銷 百度競價排名 服務(wù)外包 Linux服務(wù)器 鐵路電話系統(tǒng) 網(wǎng)站排名優(yōu)化 呼叫中心市場需求 地方門戶網(wǎng)站

1. ACID:指數(shù)據(jù)庫事務(wù)正確執(zhí)行的四個基本要素縮寫:
1.原子性2.一致性3.隔離性4.持久性

2.數(shù)據(jù)庫對象:表(table) 視圖(view) 存儲過程(stored procedure) 函數(shù)(function)索引(index)

3.SQL Server 2005中包含master、model、msdb、tempdb四個系統(tǒng)數(shù)據(jù)庫。

4.使用T-SQL語句創(chuàng)建數(shù)據(jù)庫:
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語句刪除數(shù)據(jù)庫:drop database[數(shù)據(jù)庫名]

6.常見的約束類型:主鍵約束、唯一約束、檢查約束、默認約束、外鍵約束。

7.添加約束的語法:
         Alter table 表名
         Add  constraint  約束名 約束類型 具體的約束說明

8.刪除約束:alter table 表名
            Drop constraint 約束名

9.授權(quán)語法:  grant 權(quán)限[on  表名] to 數(shù)據(jù)庫用戶
         例:grant  select  insert  update
              On students  to  zhangsan

10.T-SQL語句創(chuàng)建登錄名:
           Create  login[yuan]
            With  password='130125'
            Go

11.數(shù)據(jù)庫完整性分為:實體完整性、域完整性、參照完整性、用戶自定義完整性。

12.T-SQL 中的運算符:
運算符
 含義

=
 等于

>
 大于


 小于

>=
 大于等于

=
 小于等于

>
 不等于

!
 非

通配符
 解釋
 示例

_
 一個字符
 A Like 'C_'

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

[]
 括號中所指定范圍內(nèi)的一個字符
 C Like '9W0[1-2]'

[^]
 不在括號中所指定范圍內(nèi)的一個字符
 D Like '%[A-Z][^1-2]'

13.查詢語句:select 列名  from 表名  where 條件   如:select*  from students  where       no=1

14.插入數(shù)據(jù)行:insert  [into]表名> [列名]values值列表>
       例:intset into students(name,address,grade,email,sex)
           Values('長青菜','上海松江',5,'zqc@souhu.com','男')
      注意:(不能為標識列指定值,因為它的數(shù)字是自動增長的)

15.更新數(shù)據(jù)行:update 表名> set列名=更新值>    [where更新條件>]
      例:update  students
          Set  address='石家莊'
          Where   address='保定'

16.刪除數(shù)據(jù)行:  delete  from表名>[where刪除條件>]
       例:delete from  studentinfo     where  no='180108225'

17.問題:如果標識列A的初始值為1,增長量為2,則輸入三行數(shù)據(jù)以后,再刪除兩行,下次再輸入數(shù)據(jù)行的時候,標識值從多少開始?      (  7  )

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

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

20.變量:   局部變量(必須以標記@作為前綴)
            全局變量(必須以標記@@作為前綴)
       全局變量由系統(tǒng)定義和維護,我們只能讀取,不能修改全局變量的值。

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 '本班成績優(yōu)秀,前三名成績?yōu)椋?
      Select  top 3 * from  score  order  by score  desc
      End
      Else
        Begin
        Print  '本班成績較差,后三名成績?yōu)椋?
        Select  top 3 *from  score  order  by  score
       End

23.while循環(huán)語句:   while(條件)
                     Begin
                     語句1
                     語句2..........
                     Break
                     End
       例:DECLARE @n int
           WHILE(1=1) --條件永遠成立
           BEGIN
           SELECT @n=COUNT(*) FROM score
           WHERE score60    --統(tǒng)計不及格人數(shù)
           IF (@n>0)
           UPDATE score     --每人加2分
            SET score=score+2
          ELSE
          BREAK    --退出循環(huán)
          END
          print '加分后的成績?nèi)缦拢?
          SELECT * FROM score

24.case--end多分支語句
      語法:    case
                When  條件1  then  結(jié)果1
                When  條件2  then  結(jié)果2
                ..............
                 Else  其他結(jié)果
                 End
       例:print  'ABCDE五級顯示成績?nèi)缦拢?
           Select  studentID,
               成績=case
                        When  score60  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.習(xí)題及答案:   
        習(xí)題內(nèi)容:則根據(jù)如下規(guī)則對成績進行反復(fù)加分,直到平均分超過85分為止。請編寫T-SQL語句實現(xiàn)。
90分以上:   不加分
80-89分:   加1分
70-79分:   加2分
60-69分:   加3分
60分以下:   加5分
習(xí)題答案:
SELECT * FROM score --原始成績
DECLARE @labAvg  int
WHILE(1=1)
 BEGIN
    UPDATE score
      SET score=
        CASE
            WHEN score60 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.把一個表中的數(shù)據(jù)復(fù)制到另一個表中:  insert  into 表名>(列名)
                                       Select  列名>
                                       From 源表名>

28.把查詢結(jié)果放在新表中同時插入新的標識列:
           Select  列名  identity(數(shù)據(jù)類型,標識種子,標識增長量)as
            列名  into  新表    from  原始表
  例:   select   students.sname, students.saddress,  students.semail,  identity(int,1,1) as  studentID    into  tongxunlu    from students

29.更新數(shù)據(jù)行: 
      語法:  update表名>
              Set列名=更新值>
              Where 更新條件>
       例: update  students
             Set   address='軟件學(xué)校'
              Where  address='軟件學(xué)院'

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

31.字符串函數(shù):
      Replace:    select  replace('莫勒可切.楊可','可',‘蘭')
          返回結(jié)果:莫勒蘭切.楊蘭
      Upper:    select  upper('sql server 課程')
       返回結(jié)果:SQL SERVER 課程
      Getdate:   select  getdate()獲取當(dāng)前時間。
       Dateadd:   select  dateadd(mm,4,'01/01/2009')
        返回結(jié)果:05/01/2009
      Datename:     select  datename(dw,'01/15/2000')
       返回結(jié)果:   Saturday

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

33. 分組查詢:

復(fù)制代碼 代碼如下:

select  courseid,avg(score) as 課程平均成績
                From  score
                Group  by  courseid

34.習(xí)題:  
假如成績單中記錄了學(xué)生的幾次考試成績,要查詢每位學(xué)生的每門課的總成績,怎么查?
復(fù)制代碼 代碼如下:

Select  courseid,studentid,sum(score) as 總成績
                From  score
                Group  by  courseid,studentid

35.分組查詢--HAVING
Having:指定了組或聚合的搜索條件,常常與group by子句一起使用。
例:
復(fù)制代碼 代碼如下:

select  studentid  as學(xué)員編號,avg(score)as 平均成績
                  From   score
                  Group  by  studentid,couseid
                  Having  avg(score)>60

36.多表查詢——內(nèi)聯(lián)結(jié)    
例:
復(fù)制代碼 代碼如下:

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

37.多表聯(lián)結(jié)——三表聯(lián)結(jié)    
例:
復(fù)制代碼 代碼如下:

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.多表聯(lián)結(jié)查詢——右外聯(lián)結(jié)  
例:
復(fù)制代碼 代碼如下:

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

39.銀行案例——多表聯(lián)結(jié)——左外聯(lián)結(jié):
 例:
 
復(fù)制代碼 代碼如下:

  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.子查詢: 
例:
復(fù)制代碼 代碼如下:

select * from  students
                 Where  scode>(select  scode  from  students  where  Sname='張揚') 
                 GO

41.例:內(nèi)聯(lián)結(jié)(等值聯(lián)結(jié))
復(fù)制代碼 代碼如下:

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

42.局部變量:
例:將姓名為里斯的學(xué)生的學(xué)號,出生日期和平均成績分別賦給局部變量
@no_str @birthday_str @avgrade_num  (用select語句來實現(xiàn))
復(fù)制代碼 代碼如下:

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

43.自連接查詢:    
例:(注:student2為不存在,是創(chuàng)建的)
復(fù)制代碼 代碼如下:

               Select  student2.sno學(xué)號,student2.sname姓名,student2.ssex性別,student2.sspeciality專業(yè),student2.savgrade平均成績
               From student,student2
               Where  student.sname='李好' and student.sspeciality=student2.sspeciality

44.聲明局部變量:declare  @變量名  數(shù)據(jù)類型

45.if語句 例:查詢學(xué)號為457865的學(xué)生,如果成績及格,則打印其姓名和成績。

復(fù)制代碼 代碼如下:

         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語句:對于給定學(xué)號的查詢,如果平均成績不及格則打印姓名和平均成績,否則打印學(xué)號。
復(fù)制代碼 代碼如下:

          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 @avgrade60.0
          Begin
          Print @name
          Print @avgrade
          End
          Else
          Print @no
          Go

47.多分支的if語句查詢并實現(xiàn)分等級打印學(xué)生成績
復(fù)制代碼 代碼如下:

          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 ‘優(yōu)秀'
          Else if @avgrade>=80.0
          …………….
          Else print ‘不及格'
          Go

48.case 語句   使用select語句查詢學(xué)生的學(xué)號,然后用case函數(shù)對學(xué)生的姓名和愛好進行簡要說明。    Select  學(xué)號=sno,姓名及愛好=
              Case sno
              When ‘123' then ‘李好,游泳'
              。。。。。。。
              Else ‘沒有這人'
              End
              From  student

49.while語句
      (如果學(xué)生平均成績低于85分,則循環(huán)執(zhí)行對每位學(xué)生成績加0.5%,在循環(huán)過程中,如果最高成績超過95分則退出循環(huán);在加分過程中,當(dāng)成績的平均成績大于或等于80分時打印出當(dāng)前成績的平均成績)

復(fù)制代碼 代碼如下:

     Declare @avgrade numeric(3,1);
            Set @avgrade=(select  avg(savgrade) from student)
            While @avgrade85
             Begin
                      Update student
                        Set savgrade=savgrade+savgrade*0.005
                      Set @avgrade=(select avg(savgrade) from student)
                      If @avgrade>95
                         Break                            --退出循環(huán)
                      if@avgrade80
                      continue                             --結(jié)束本次循環(huán)
                      print @avgrade
                      End

50.子查詢:查詢成績剛好通過60分的學(xué)生
              Select sname from students
                  Inner  Join  score                ---內(nèi)連接
                   ON students.scode=score.studentid
                   Where  score=60
                    Go

51.事務(wù)的特性:原子性、一致性、隔離性、永久性。
  事務(wù)分類:顯示事務(wù)、隱性事務(wù)、自動提交事務(wù)。

52.系統(tǒng)存儲過程的名稱都以“sp_”開頭或“xp_”開頭。
        EXEC sp_databases     列出當(dāng)前系統(tǒng)的數(shù)據(jù)庫
        EXEC sp_help students  查看表students的信息

53.定義存儲過程的語法:  
             Create  proc[edure]  存儲過程名
              @參數(shù)1  數(shù)據(jù)類型=默認值 output,
               ...................
              @參數(shù)n  數(shù)據(jù)類型=默認值 output
              As
              SQL語句
              Go (注:參數(shù)可選,參數(shù)分輸入?yún)?shù)、輸出參數(shù),輸入?yún)?shù)允許有默認值)

54.創(chuàng)建不帶參數(shù)的存儲過程:    
例:

復(fù)制代碼 代碼如下:

           Creat  procedure  pro_stu
           As
           Declare  @myAvg float
           Select  @myAvg=AVG(score)
           From score
           Print '平均分:'+convert(varchar(5),@myAvg)
           If(@myAvg>70)
              Print '本班考試成績:優(yōu)秀'
            Else
               Print '本班考試成績:較差'
            Print '-----------------------------------------------------------'
            Print '參加本次考試沒有通過的學(xué)員:'
               Select  name,scode,score
                   From students inner Join score  on
                   Students.scode=score.studentid     where  score60
     GO

55.調(diào)用存儲過程:   語法:   EXEC  過程名[參數(shù)]    例:EXEC proc_stu 

56.輸入?yún)?shù)的默認值:    
例:

復(fù)制代碼 代碼如下:

         Create procedure  proc_stuMn
            @scorePass  int=60        ---及格線默認為60分
         As
            Print '及格線:' +convert(varchar(5),@scorePass)
            Print '參加本次考試沒有通過的學(xué)員:'
          Select  name,scode,score
                From students
                Inner Join score
                On students.scode=score.studentid
                 Where score@scorePass
         Go

57.調(diào)用帶參數(shù)默認值的存儲過程: 
             EXEC proc_stu    -------采用默認值
             EXEC proc_stu 55    ------不采用默認值
             EXEC proc_stu  @scorePass=55

58.帶輸出參數(shù)的存儲過程:

復(fù)制代碼 代碼如下:

        Create procedure proc_stuM
        @notpassSum  int  output,
        @scorePass  int=60
        As 
           Print'及格線:'+convert(varchar(5),@scorePass)
           Print '參加本次考試沒有通過的學(xué)員:'
        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.調(diào)用帶輸出參數(shù)的存儲過程:(注:調(diào)用時必須帶output關(guān)鍵字,返回結(jié)果將存放在變量@sum 中)
復(fù)制代碼 代碼如下:

    Declare @sum int
           EXEC proc_stuM @sum output,60
           Print '--------------------------------------------------'
           If @sum>=3
                 Print '未通過人數(shù):'+convert(varchar(5),@sum )+'人,超過60%,及格分數(shù)線還應(yīng)下調(diào)'
           Else
                  Print '未通過人數(shù):'+convert(varchar(5),@sum )+'人,已控制在60%以下,及格分數(shù)線適中'          
           GO

60.錯誤處理:  
使用Raiserror語句:
復(fù)制代碼 代碼如下:

           Create  procedure  pro_stuM
                  @notpassSum  int output,
                  @scorePass  int=60
            As
               If(not  @scorePass  between 0 and 100)
                   Begin
                   Raiserror('及格線錯誤,請指定0—100之間的分數(shù),統(tǒng)計中斷退出',16,1) --------引發(fā)系統(tǒng)錯誤,指定錯誤的嚴重級別16,調(diào)用狀態(tài)為1(默認),并影響@@ERROR 系統(tǒng)變量的值
                   Return   --------立即返回,退出存儲過程
             End
               ...............其他語句同上例
             Go

61.使用raiserror語句
復(fù)制代碼 代碼如下:

          Declare  @sum int,@t int
          EXEC proc_stum @sum  output, 604   ----筆試及格線誤輸入604分
          Set @t=@@error
          Print '錯誤號:'+convert(varchar(5),@t )
          If @t>o
          Return   ------退出批處理,后續(xù)語句不再執(zhí)行
          Print '-----------------------------------'      -----如果執(zhí)行了raiseerror語句,系統(tǒng)全局@@error 將不等于0,表示出現(xiàn)了錯誤.
           If @sum>=3
             Print '未通過人數(shù):'+convert(varchar(5),@sum)+'人,超過了60%,及格分數(shù)線還應(yīng)下調(diào)'
           Else   print '未通過人數(shù):'+convert(varchar(5),@sum)+'人,已控制在60%以下,及格分數(shù)線適中'              GO

62.調(diào)用存儲過程:         
例:
復(fù)制代碼 代碼如下:

               Declare  @s  int
               Exec proc_stuinfo  '張三' ,@s , 30    ———錯誤!應(yīng)為(exec proc_stuinfo '張三',@s  output,30)
                Exec proc_stuinfo '張三' ,@s     ————錯誤!應(yīng)為(exec proc_stuinfo '張三',@s output)
                Exec proc_stuinfo  @sAge=22,@stuName='李四',@m=@s output(正確?。?/P>


63.帶輸出參數(shù)的存儲過程:  
例:
復(fù)制代碼 代碼如下:

           Declare @sum  int
           Exec proc_stuM @sum  output,60
           Print '-----------------------------------------'
           If  @sum>=3
              Print'未通過人數(shù):'+convert(varchar(5),@sum )+'人,超過60%,及格分數(shù)線還應(yīng)下調(diào)'
           Else 
               Print'未通過人數(shù):'+convert(varchar(5),@sum )+'人,已控制在60…60%以下,及格分數(shù)線適中'       GO

64.創(chuàng)建觸發(fā)器語法:   
復(fù)制代碼 代碼如下:

Create  trigger  trigger_name
                       On  table_name
                       [with  encryption] --------表示加密觸發(fā)器定義的SQL文本
                       For [delete,insert,update]    -------指定觸發(fā)器類型
                       As
                         T_SQL語句
                       GO   

65.Insert 觸發(fā)器  
例:
復(fù)制代碼 代碼如下:

       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. 插入一條語句    
例:
復(fù)制代碼 代碼如下:

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

67. Delete觸發(fā)器示例:
            Create  trigger  tri_delete_transInfo
            On  transInfo
            For  delete
            As
                Print '開始備份數(shù)據(jù),請稍候......'
                If  not  exists(select * from  sysobjects  where  name='backupTable')
                Select * into backupTable  from  deleted        ------------從deleted表中獲取被刪除的交易記錄。
                 Else
                    Insert  into backupTable  select * from  deleted
                    Print '備份數(shù)據(jù)成功,備份表中的數(shù)據(jù)為:'
                    Select * from  backupTable
                    Select * from  transInfo
                GO   

68. Update 觸發(fā)器:

復(fù)制代碼 代碼如下:

            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         ------------回滾事務(wù),撤銷交易
                        End
            Go

69. 列級update觸發(fā)器
復(fù)制代碼 代碼如下:

         Create  trigger  trig_update_transIfo
         ON  transInfo
         For  update
         As
             If  update(transDate)
             Begin                -------檢查是否修改了交易日期列transDate
             Print  '交易失敗......'
             Raiserror('安全警告:交易日期不能修改,由系統(tǒng)自動產(chǎn)生',16,1)
             Rollback  transaction          ----------回滾事務(wù),撤銷交易
             End
         GO

70.數(shù)據(jù)庫階段數(shù)據(jù)管理的主要特點:1.采用數(shù)據(jù)模型表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu);2.有較高的數(shù)據(jù)獨立性;3.為用戶提供了方便的用戶接口;4.提供數(shù)據(jù)控制功能;5.增加系統(tǒng) 的靈活性。

71.   DB(數(shù)據(jù)庫):存儲在計算機內(nèi)有組織的、統(tǒng)一管理的相關(guān)數(shù)據(jù)的集合。
  DBMS(數(shù)據(jù)庫管理系統(tǒng)):位于用戶與操作系統(tǒng)之間的數(shù)據(jù)管理軟件。
  DBS(數(shù)據(jù)庫系統(tǒng)):是實現(xiàn)有組織的、動態(tài)的存儲大量關(guān)聯(lián)數(shù)據(jù),以方便用戶訪問計算就硬件、軟件和株距資源組成的計算機系統(tǒng)。

72.物理數(shù)據(jù)獨立性和邏輯數(shù)據(jù)獨立性:
       物理數(shù)據(jù)獨立性:內(nèi)模式的修改,只需對模式/內(nèi)模式映象做相應(yīng)修改,而不需修改        概念模式。邏輯數(shù)據(jù)獨立性:概念模式的修改,只需對外模式/模式映象做相應(yīng)修改,而不
需修改外模式。

73.  DBMS的主要功能:
        數(shù)據(jù)定義(DDL):三級結(jié)構(gòu)、兩級映象、完整性約束等。數(shù)據(jù)操縱(DML):檢索、更新。數(shù)據(jù)保護:數(shù)據(jù)恢復(fù)、并發(fā)控制、完整性控制、安全性控制等。數(shù)據(jù)維護:數(shù)據(jù)載入、轉(zhuǎn)換、存儲、、性能監(jiān)控等。數(shù)據(jù)字典(DD):存儲三級結(jié)構(gòu)定義的數(shù)據(jù)庫稱為DD,即系統(tǒng)數(shù)據(jù)庫。DBMS主要功能:數(shù)據(jù)庫定義功能、數(shù)據(jù)存取功能、數(shù)據(jù)庫運行管理功能、數(shù)據(jù)庫的建立和維護功能。

74.--1、創(chuàng)建存儲過程--

復(fù)制代碼 代碼如下:

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
--調(diào)用存儲過程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.
復(fù)制代碼 代碼如下:

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
--調(diào)用存儲過程--
exec Avg_wage @PWage=3000,@AWage=200,@total=0
exec Avg_wage @PWage=4500,@AWage=200,@total=0

76.代碼:
復(fù)制代碼 代碼如下:

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='軟件學(xué)院'
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 學(xué)號,saddress as 地址
FROM  yuan
WHERE  sschool ='軟件學(xué)院'
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')   (轉(zhuǎn)換成小寫)
select replace('軟件學(xué)院','軟件學(xué)院','軟件工程學(xué)院')  (替換)
select stuff('a b c d e f g h i j k l m n',3,6,'今天的學(xué)習(xí)內(nèi)容')   (從第三字符個開始替換,替換6個字符)
select getdate()   (當(dāng)前日期)
select dateadd(dd,250,'04/12/2009')   (250天后的日期)
select datediff(mm,'04/20/2005','08/05/2010')   (相差的月數(shù))
select datename(dw,'04/12/2009')    (返回星期幾)
select datepart(dd,'04/12/2009')    (返回當(dāng)天是幾號)
select abs(-10)   絕對值
select ceiling(-32.8)    返回大于或等于該數(shù)的最小整數(shù)
select power(102,3)   取數(shù)值表達式的冪值
select round(3.141592653,4)     (?)將數(shù)值表達式四舍五入成指定精度
select sign(1000)   正數(shù)返回1,負數(shù)返回-1,0返回0.
select sqrt(6.25)      //返回該數(shù)據(jù)的平方根
select convert(varchar(100),45678932) //轉(zhuǎn)變數(shù)據(jù)類型 
select current_user      //返回當(dāng)前用戶的名字
select datalength('軟件學(xué)院')    //返回字符長度
select host_name()   //返回用戶登錄的計算機名
select system_user      //返回登錄的用戶名
select user_name(1)     //從任意數(shù)據(jù)庫中返回dbo(jizhu)
create proc pro_stu
@scorepass float
as
print '學(xué)號'+convert(varchar(5),@scorepass)
select name
from stuent
where student.score=@scorepass
go
exec pro_stu @scorepass=85

76.導(dǎo)出SQL Server數(shù)據(jù)庫中數(shù)據(jù):
復(fù)制代碼 代碼如下:

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

標簽:湘潭 衡水 蘭州 黃山 仙桃 崇左 湖南 銅川

巨人網(wǎng)絡(luò)通訊聲明:本文標題《SQL Server 2005基礎(chǔ)知識詳細整理》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    崇左市| 宜宾县| 东兰县| 察雅县| 孝昌县| 吴江市| 那曲县| 井陉县| 阳春市| 育儿| 姜堰市| 晴隆县| 松桃| 西乌| 阜康市| 杨浦区| 祁东县| 威远县| 揭东县| 汕头市| 宁国市| 桦甸市| 石嘴山市| 庆城县| 英德市| 长白| 盐亭县| 浏阳市| 顺平县| 云阳县| 阿城市| 广水市| 沂水县| 仁布县| 兴化市| 绵竹市| 廊坊市| 枞阳县| 吉林省| 沭阳县| 盱眙县|