SQL Server 2005基礎(chǔ)知識(shí)詳細(xì)整理
1. ACID:指數(shù)據(jù)庫事務(wù)正確執(zhí)行的四個(gè)基本要素縮寫:
1.原子性2.一致性3.隔離性4.持久性
2.數(shù)據(jù)庫對象:表(table) 視圖(view) 存儲(chǔ)過程(stored procedure) 函數(shù)(function)索引(index)
3.SQL Server 2005中包含master、model、msdb、tempdb四個(gè)系統(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.常見的約束類型:主鍵約束、唯一約束、檢查約束、默認(rèn)約束、外鍵約束。
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ù)庫完整性分為:實(shí)體完整性、域完整性、參照完整性、用戶自定義完整性。
12.T-SQL 中的運(yùn)算符:
運(yùn)算符
含義
=
等于
>
大于
<
小于
>=
大于等于
<=
小于等于
<>
不等于
!
非
通配符
解釋
示例
_
一個(gè)字符
A Like 'C_'
%
任意長度的字符
B Like 'CO_%'
[]
括號(hào)中所指定范圍內(nèi)的一個(gè)字符
C Like '9W0[1-2]'
[^]
不在括號(hào)中所指定范圍內(nèi)的一個(gè)字符
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','男')
注意:(不能為標(biāo)識(shí)列指定值,因?yàn)樗臄?shù)字是自動(dòng)增長的)
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.問題:如果標(biāo)識(shí)列A的初始值為1,增長量為2,則輸入三行數(shù)據(jù)以后,再刪除兩行,下次再輸入數(shù)據(jù)行的時(shí)候,標(biāo)識(shí)值從多少開始? ( 7 )
18.刪除列: alter table student drop column address
19.Exists: if exists (select*from?where name='yuanDB') drop database stuDB
20.變量: 局部變量(必須以標(biāo)記@作為前綴)
全局變量(必須以標(biāo)記@@作為前綴)
全局變量由系統(tǒng)定義和維護(hù),我們只能讀取,不能修改全局變量的值。
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) --條件永遠(yuǎn)成立
BEGIN
SELECT @n=COUNT(*) FROM score
WHERE score<60 --統(tǒng)計(jì)不及格人數(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五級(jí)顯示成績?nèi)缦拢?
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.習(xí)題及答案:
習(xí)題內(nèi)容:則根據(jù)如下規(guī)則對成績進(jìn)行反復(fù)加分,直到平均分超過85分為止。請編寫T-SQL語句實(shí)現(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 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.把一個(gè)表中的數(shù)據(jù)復(fù)制到另一個(gè)表中: insert into <表名>(列名)
Select <列名>
From <源表名>
28.把查詢結(jié)果放在新表中同時(shí)插入新的標(biāo)識(shí)列:
Select 列名 identity(數(shù)據(jù)類型,標(biāo)識(shí)種子,標(biāo)識(shí)增長量)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)前時(shí)間。
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. 分組查詢:
select courseid,avg(score) as 課程平均成績
From score
Group by courseid
34.習(xí)題:
假如成績單中記錄了學(xué)生的幾次考試成績,要查詢每位學(xué)生的每門課的總成績,怎么查?
Select courseid,studentid,sum(score) as 總成績
From score
Group by courseid,studentid
35.分組查詢--HAVING
Having:指定了組或聚合的搜索條件,常常與group by子句一起使用。
例:
select studentid as學(xué)員編號(hào),avg(score)as 平均成績
From score
Group by studentid,couseid
Having avg(score)>60
36.多表查詢——內(nèi)聯(lián)結(jié)
例:
select students.smame, score.courseid, score.score
From students,score
Where students.scode=score.studentid
37.多表聯(lián)結(jié)——三表聯(lián)結(jié)
例:
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é)
例:
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é):
例:
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='張揚(yáng)')
GO
41.例:內(nèi)聯(lián)結(jié)(等值聯(lián)結(jié))
select sname from students
Inner Join score
ON students.scode=score.studentid
Where score=60
GO
42.局部變量:
例:將姓名為里斯的學(xué)生的學(xué)號(hào),出生日期和平均成績分別賦給局部變量
@no_str @birthday_str @avgrade_num (用select語句來實(shí)現(xiàn))
Select @no_str=s_no,@birthday_str=s_birthday,@avgrade_num=s_avgrade
From student where s_name='里斯'
43.自連接查詢:
例:(注:student2為不存在,是創(chuàng)建的)
Select student2.sno學(xué)號(hào),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é)號(hào)為457865的學(xué)生,如果成績及格,則打印其姓名和成績。
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é)號(hào)的查詢,如果平均成績不及格則打印姓名和平均成績,否則打印學(xué)號(hào)。
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語句查詢并實(shí)現(xiàn)分等級(jí)打印學(xué)生成績
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é)號(hào),然后用case函數(shù)對學(xué)生的姓名和愛好進(jìn)行簡要說明。 Select 學(xué)號(hào)=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分時(shí)打印出當(dāng)前成績的平均成績)
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 --退出循環(huán)
if@avgrade<80
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ù)、自動(dòng)提交事務(wù)。
52.系統(tǒng)存儲(chǔ)過程的名稱都以“sp_”開頭或“xp_”開頭。
EXEC sp_databases 列出當(dāng)前系統(tǒng)的數(shù)據(jù)庫
EXEC sp_help students 查看表students的信息
53.定義存儲(chǔ)過程的語法:
Create proc[edure] 存儲(chǔ)過程名
@參數(shù)1 數(shù)據(jù)類型=默認(rèn)值 output,
...................
@參數(shù)n 數(shù)據(jù)類型=默認(rèn)值 output
As
SQL語句
Go (注:參數(shù)可選,參數(shù)分輸入?yún)?shù)、輸出參數(shù),輸入?yún)?shù)允許有默認(rèn)值)
54.創(chuàng)建不帶參數(shù)的存儲(chǔ)過程:
例:
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 score<60
GO
55.調(diào)用存儲(chǔ)過程: 語法: EXEC 過程名[參數(shù)] 例:EXEC proc_stu
56.輸入?yún)?shù)的默認(rèn)值:
例:
Create procedure proc_stuMn
@scorePass int=60 ---及格線默認(rèn)為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ù)默認(rèn)值的存儲(chǔ)過程:
EXEC proc_stu -------采用默認(rèn)值
EXEC proc_stu 55 ------不采用默認(rèn)值
EXEC proc_stu @scorePass=55
58.帶輸出參數(shù)的存儲(chǔ)過程:
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ù)的存儲(chǔ)過程:(注:調(diào)用時(shí)必須帶output關(guān)鍵字,返回結(jié)果將存放在變量@sum 中)
Declare @sum int
EXEC proc_stuM @sum output,60
Print '--------------------------------------------------'
If @sum>=3
Print '未通過人數(shù):'+convert(varchar(5),@sum )+'人,超過60%,及格分?jǐn)?shù)線還應(yīng)下調(diào)'
Else
Print '未通過人數(shù):'+convert(varchar(5),@sum )+'人,已控制在60%以下,及格分?jǐn)?shù)線適中'
GO
60.錯(cuò)誤處理:
使用Raiserror語句:
Create procedure pro_stuM
@notpassSum int output,
@scorePass int=60
As
If(not @scorePass between 0 and 100)
Begin
Raiserror('及格線錯(cuò)誤,請指定0—100之間的分?jǐn)?shù),統(tǒng)計(jì)中斷退出',16,1) --------引發(fā)系統(tǒng)錯(cuò)誤,指定錯(cuò)誤的嚴(yán)重級(jí)別16,調(diào)用狀態(tài)為1(默認(rèn)),并影響@@ERROR 系統(tǒng)變量的值
Return --------立即返回,退出存儲(chǔ)過程
End
...............其他語句同上例
Go
61.使用raiserror語句
Declare @sum int,@t int
EXEC proc_stum @sum output, 604 ----筆試及格線誤輸入604分
Set @t=@@error
Print '錯(cuò)誤號(hào):'+convert(varchar(5),@t )
If @t<>o
Return ------退出批處理,后續(xù)語句不再執(zhí)行
Print '-----------------------------------' -----如果執(zhí)行了raiseerror語句,系統(tǒng)全局@@error 將不等于0,表示出現(xiàn)了錯(cuò)誤.
If @sum>=3
Print '未通過人數(shù):'+convert(varchar(5),@sum)+'人,超過了60%,及格分?jǐn)?shù)線還應(yīng)下調(diào)'
Else print '未通過人數(shù):'+convert(varchar(5),@sum)+'人,已控制在60%以下,及格分?jǐn)?shù)線適中' GO
62.調(diào)用存儲(chǔ)過程:
例:
Declare @s int
Exec proc_stuinfo '張三' ,@s , 30 ———錯(cuò)誤!應(yīng)為(exec proc_stuinfo '張三',@s output,30)
Exec proc_stuinfo '張三' ,@s ————錯(cuò)誤!應(yīng)為(exec proc_stuinfo '張三',@s output)
Exec proc_stuinfo @sAge=22,@stuName='李四',@m=@s output(正確!)
63.帶輸出參數(shù)的存儲(chǔ)過程:
例:
Declare @sum int
Exec proc_stuM @sum output,60
Print '-----------------------------------------'
If @sum>=3
Print'未通過人數(shù):'+convert(varchar(5),@sum )+'人,超過60%,及格分?jǐn)?shù)線還應(yīng)下調(diào)'
Else
Print'未通過人數(shù):'+convert(varchar(5),@sum )+'人,已控制在60…60%以下,及格分?jǐn)?shù)線適中' GO
64.創(chuàng)建觸發(fā)器語法:
Create trigger trigger_name
On table_name
[with encryption] --------表示加密觸發(fā)器定義的SQL文本
For [delete,insert,update] -------指定觸發(fā)器類型
As
T_SQL語句
GO
65.Insert 觸發(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. 插入一條語句
例:
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ā)器:
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. 列級(jí)update觸發(fā)器
Create trigger trig_update_transIfo
ON transInfo
For update
As
If update(transDate)
Begin -------檢查是否修改了交易日期列transDate
Print '交易失敗......'
Raiserror('安全警告:交易日期不能修改,由系統(tǒng)自動(dòng)產(chǎn)生',16,1)
Rollback transaction ----------回滾事務(wù),撤銷交易
End
GO
70.數(shù)據(jù)庫階段數(shù)據(jù)管理的主要特點(diǎn):1.采用數(shù)據(jù)模型表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu);2.有較高的數(shù)據(jù)獨(dú)立性;3.為用戶提供了方便的用戶接口;4.提供數(shù)據(jù)控制功能;5.增加系統(tǒng) 的靈活性。
71. DB(數(shù)據(jù)庫):存儲(chǔ)在計(jì)算機(jī)內(nèi)有組織的、統(tǒng)一管理的相關(guān)數(shù)據(jù)的集合。
DBMS(數(shù)據(jù)庫管理系統(tǒng)):位于用戶與操作系統(tǒng)之間的數(shù)據(jù)管理軟件。
DBS(數(shù)據(jù)庫系統(tǒng)):是實(shí)現(xiàn)有組織的、動(dòng)態(tài)的存儲(chǔ)大量關(guān)聯(lián)數(shù)據(jù),以方便用戶訪問計(jì)算就硬件、軟件和株距資源組成的計(jì)算機(jī)系統(tǒng)。
72.物理數(shù)據(jù)獨(dú)立性和邏輯數(shù)據(jù)獨(dú)立性:
物理數(shù)據(jù)獨(dú)立性:內(nèi)模式的修改,只需對模式/內(nèi)模式映象做相應(yīng)修改,而不需修改 概念模式。邏輯數(shù)據(jù)獨(dú)立性:概念模式的修改,只需對外模式/模式映象做相應(yīng)修改,而不
需修改外模式。
73. DBMS的主要功能:
數(shù)據(jù)定義(DDL):三級(jí)結(jié)構(gòu)、兩級(jí)映象、完整性約束等。數(shù)據(jù)操縱(DML):檢索、更新。數(shù)據(jù)保護(hù):數(shù)據(jù)恢復(fù)、并發(fā)控制、完整性控制、安全性控制等。數(shù)據(jù)維護(hù):數(shù)據(jù)載入、轉(zhuǎn)換、存儲(chǔ)、、性能監(jiān)控等。數(shù)據(jù)字典(DD):存儲(chǔ)三級(jí)結(jié)構(gòu)定義的數(shù)據(jù)庫稱為DD,即系統(tǒng)數(shù)據(jù)庫。DBMS主要功能:數(shù)據(jù)庫定義功能、數(shù)據(jù)存取功能、數(shù)據(jù)庫運(yùn)行管理功能、數(shù)據(jù)庫的建立和維護(hù)功能。
74.--1、創(chuàng)建存儲(chǔ)過程--
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)用存儲(chǔ)過程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
--調(diào)用存儲(chǔ)過程--
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='軟件學(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é)號(hào),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)容') (從第三字符個(gè)開始替換,替換6個(gè)字符)
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)天是幾號(hào))
select abs(-10) 絕對值
select ceiling(-32.8) 返回大于或等于該數(shù)的最小整數(shù)
select power(102,3) 取數(shù)值表達(dá)式的冪值
select round(3.141592653,4) (?)將數(shù)值表達(dá)式四舍五入成指定精度
select sign(1000) 正數(shù)返回1,負(fù)數(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() //返回用戶登錄的計(jì)算機(jī)名
select system_user //返回登錄的用戶名
select user_name(1) //從任意數(shù)據(jù)庫中返回dbo(jizhu)
create proc pro_stu
@scorepass float
as
print '學(xué)號(hào)'+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ù):
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
相關(guān)文章
PowerDesigner中如何導(dǎo)入SQL Server數(shù)據(jù)庫
這篇文章向我們介紹了如何導(dǎo)入SQL Server數(shù)據(jù)庫到PowerDesigner中的詳細(xì)步驟說明,并附帶圖片介紹,需要了解的朋友可以參考下2015-07-07關(guān)于sqlserver 2005 使用臨時(shí)表的問題( Invalid object name #temptb)
最近在利用 SSRS 2005 做報(bào)表的時(shí)候,調(diào)用帶有臨時(shí)表的數(shù)據(jù)源時(shí),系統(tǒng)會(huì)報(bào)錯(cuò),并無法進(jìn)入向?qū)У南乱徊?提示There is an error in the query. Invalid object name #temptb2012-07-07SQL2005Express中導(dǎo)入ACCESS數(shù)據(jù)庫的兩種方法
這篇文章主要介紹了SQL2005Express中導(dǎo)入ACCESS數(shù)據(jù)庫的方法,需要的朋友可以參考下2014-09-09SQL Server 2005 DTS導(dǎo)入平面數(shù)據(jù)出現(xiàn)錯(cuò)誤解決方案
SQL Server 2005 DTS導(dǎo)入平面數(shù)據(jù)源時(shí),總是被截?cái)?,無法執(zhí)行的錯(cuò)誤解決方案2012-11-11Win7 32/64位系統(tǒng)下安裝SQL2005和SP3補(bǔ)丁安裝教程[圖文]
今天有網(wǎng)友問win7 64系統(tǒng)下能安裝sql2005嗎,答案是肯定了,大家可以參考下面這篇文章試試2012-12-12SQL2005 學(xué)習(xí)筆記 公用表表達(dá)式(CTE)
公用表表達(dá)式是Sql Server2005新增加的一個(gè)非常好用的功能。2009-07-07SQL server 管理事務(wù)和數(shù)據(jù)庫介紹
用SQL server 處理數(shù)據(jù)庫,主要就是和數(shù)據(jù)庫還有處理數(shù)據(jù)庫的事務(wù)打交道,如何管理好數(shù)據(jù)庫這個(gè)對象和處理數(shù)據(jù)庫的事務(wù)過程,是我們運(yùn)用好SQL server非常關(guān)鍵的一點(diǎn)2012-08-08SqlServer2005 自動(dòng)備份并存儲(chǔ)另一電腦上的存儲(chǔ)過程函數(shù)
SqlServer2005自動(dòng)備份并存儲(chǔ)另一電腦上的存儲(chǔ)函數(shù),想要備份的朋友可以參考下。2011-06-06MS-sql 2005拒絕了對對象 ''xxx'' (數(shù)據(jù)庫 ''xxx'',架構(gòu) ''dbo'')的 SELECT 權(quán)
訪問了提示“MS-sql 2005拒絕了對對象 'xxx' (數(shù)據(jù)庫 'xxx',架構(gòu) 'dbo')的 SELECT 權(quán)限”的錯(cuò)誤2008-05-05Sqlserver 2005使用XML一次更新多條記錄的方法
Sqlserver 2005使用XML一次更新多條記錄的方法,需要一次更新多條記錄的朋友可以參考下。2010-04-04