GVKun编程网logo

SQL Server 2005基础知识详细整理(sql server 2005使用教程)

7

想了解SQLServer2005基础知识详细整理的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于sqlserver2005使用教程的相关问题,此外,我们还将为您介绍关于SQLServer20

想了解SQL Server 2005基础知识详细整理的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于sql server 2005使用教程的相关问题,此外,我们还将为您介绍关于SQL Server 2005 基础知识整理、SQL Server SERVER 2005 数学函数整理、SQL Server 安装了Sql2000的基础上安装Sql2005的详细过程、sql-server – 如何为SQL Server 2008创建链接服务器,其中有2000和2005的数据库的新知识。

本文目录一览:

SQL Server 2005基础知识详细整理(sql server 2005使用教程)

SQL Server 2005基础知识详细整理(sql server 2005使用教程)

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,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),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),@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,@total=0
exec Sum_wage @PWage=3000,@total=0
exec Sum_wage @PWage=4000,@total=0
exec Sum_wage @PWage=5000,@total=0
exec Sum_wage @PWage=6000,@total=0

75.
代码如下:if exists (select * from sysobjects where name='Avg_wage')
drop procedure Avg_wage
GO
create procedure Avg_wage
@PWage int,
@total int
as
while (1=1)
begin
if ((select Avg(Wage) from ProWage)<=@PWage)
update ProWage set @total=@total+@AWage,@total)+'元'
print'加薪后的程序员工资列表:'
select * from ProWage
--调用存储过程--
exec Avg_wage @PWage=3000,@AWage=200,@total=0
exec Avg_wage @PWage=4500,@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_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),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.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),2)'+' end'
when a.xtype =58 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),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.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

SQL Server 2005 基础知识整理

SQL Server 2005 基础知识整理

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

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

3.SQL Server 2005 中包含 mastermodelmsdbtempdb 四个系统数据库。

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 分以上:   不加分

8089 分:   加 1

7079 分:   加 2

6069 分:   加 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  dateaddmm,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  courseidstudentidsumscore) as 总成绩

                From  score

                Group  by  courseidstudentid

35. 分组查询 --HAVING

             Having:指定了组或聚合的搜索条件,常常与 group by 子句一起使用。

           例:   select  studentid  as 学员编号,avgscoreas 平均成绩

                  From   score

                  Group  by  studentidcouseid

                  Having  avgscore>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  ONS.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  accountaccount.Cardidaccount.score

                Select  users.cardid

                From users 

                Left  Join account  ONaccount.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 studentstudent2

               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 numeric31);

            Set @avgrade=select  avgsavgrade) from student

            While @avgrade<85

             Begin 

                      Update student

                        Set savgrade=savgrade+savgrade*0.005

                      Set @avgrade=select avgsavgrade) 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=AVGscore

           From score

           Print '' 平均分:''+convertvarchar5),@myAvg

           If@myAvg>70

              Print '' 本班考试成绩:优秀'' 

            Else

               Print '' 本班考试成绩:较差'' 

            Print ''-----------------------------------------------------------'' 

            Print '' 参加本次考试没有通过的学员:'' 

               Select  namescodescore

                   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  namescodescore

                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'' 及格线:''+convertvarchar5),@scorePass

           Print '' 参加本次考试没有通过的学员:''

        Select  namescodescore      from  students

              Inner Join score  On   students.scode=score.studentid

                   Where  score<@scorePass

         Select @notpassSum=countstudentid

               From score where score<@scorePass

         GO

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

           Declare @sum int

           EXEC proc_stuM @sum output60

           Print ''--------------------------------------------------''

           If @sum>=3

                 Print '' 未通过人数:''+convertvarchar5),@sum +'' 人,超过 60%,及格分数线还应下调''

           Else 

                  Print '' 未通过人数:''+convertvarchar5),@sum +'' 人,已控制在 60% 以下,及格分数线适中''           

           GO

60. 错误处理:   

                   使用 Raiserror 语句:

           Create  procedure  pro_stuM

                  @notpassSum  int output

                  @scorePass  int=60

            As

               Ifnot  @scorePass  between 0 and 100

                   Begin

                   Raiserror'' 及格线错误,请指定 0100 之间的分数,统计中断退出''161) -------- 引发系统错误,指定错误的严重级别 16,调用状态为 1(默认),并影响 @@ERROR 系统变量的值

                   Return   -------- 立即返回,退出存储过程

             End 

               ............... 其他语句同上例

             Go 

61. 使用 raiserror 语句

          Declare  @sum int@t int

          EXEC proc_stum @sum  output, 604   ---- 笔试及格线误输入 604

          Set @t=@@error

          Print '' 错误号:''+convertvarchar5),@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  output30

                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  output60

           Print ''-----------------------------------------''

           If  @sum>=3

              Print'' 未通过人数:''+convertvarchar5),@sum +'' 人,超过 60%,及格分数线还应下调''

           Else  

               Print'' 未通过人数:''+convertvarchar5),@sum +'' 人,已控制在 6060% 以下,及格分数线适中''       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  char4),@outMoney  Money

        Declare  @myCardID  char10),@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  transInfotransTypetransMoneycardID

          Values '' 支取''200''10011001''

67. Delete 触发器示例:

            Create  trigger  tri_delete_transInfo

            On  transInfo

            For  delete

            As 

                Print '' 开始备份数据,请稍候......''

                If  not  existsselect * 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 '' 交易金额:''+convertvarchar8),

                          ABS@afterMoney-@beforeMoney)

                        Raiserror ('' 每笔交易不能超过 2 万元 , 交易失败'',16,1)

                        Rollback  transaction         ------------ 回滚事务 , 撤销交易

                        End

            Go

69. 列级 update 触发器

         Create  trigger  trig_update_transIfo

         ON  transInfo

         For  update

         As

             If  updatetransDate

             Begin                ------- 检查是否修改了交易日期列 transDate

             Print  '' 交易失败......''

             Raiserror'' 安全警告:交易日期不能修改,由系统自动产生''161

             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,负数返回 -10 返回 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

SQL Server SERVER 2005 数学函数整理

SQL Server SERVER 2005 数学函数整理

感兴趣的小伙伴,下面一起跟随小编 jb51.cc的小编两巴掌来看看吧!

MSsql SERVER 2005 数学函数
1.求绝对值
ABS()
select FWeight-50,ABS(FWeight-50),ABS(-5.38) from T_Person
2.求幂
POWER(X,Y) 用来计算X的Y次幂
select FWeight,POWER(FWeight,-0.5),2),
POWER(FWeight,3),4) from T_Person
select Power(2,2)
3.求平方根
SQRT()
select FWeight,SQRT(FWeight) from T_Person
4. 求随机数
RAND() 支持有参数,也可以没参数
select RAND()
select RAND(123)
5.舍入到最大整数
CEILING()
select FName,FWeight,CEILING(FWeight),CEILING(FWeight*-1) from T_Person
6.舍入到最小整数
FLOOR()
select FName,FLOOR(FWeight),FLOOR(FWeight*-1) from T_Person
7.四舍五入
ROUND()
ROUND(m,d) m为待进行四舍五入的数值,d为计算精度,也就是四舍五入时保留的小数位数
d为0表示不保留小数位,d为负值表示在整数部分进行四舍五入。
select FName,ROUND(FWeight,1),ROUND(FWeight*-1,0),-1) from T_Person
8.求正弦值
SIN()
select FName,SIN(FWeight)from T_Person
9.求余弦值
COS()
select FName,COS(FWeight) from T_Person
10.求反正弦
ASIN()
select FName,ASIN(1/FWeight) from T_Person
11.求反余弦
ACOS()
select FName,ACOS(1/FWeight) from T_Person
12.求正切值
TAN()
select FName,TAN(FWeight) from T_Person
13.求反正切值
atan()
select FName,atan(FWeight) from T_Person
14.求两个变量的反正切
ATN2(X,Y) 类似于计算Y/X的反正切
select FName,ATN2(Fweight,2) from T_Person
15.求余切
COT()
select FName,COT(Fweight) from T_Person
16.求圆周率π值
PI()
select FName,Fweight*PI(),PI() from T_Person
17.弧度制转换为角度制
degrees() 结果的精确度与参数有关
select degrees(PI()),degrees(3.0),degrees(3)
18.角度制转换为弧度制
radians() 结果的精确度与参数有关
select radians(180),radians(180.0)
19.求符号
SIGN() 返回一个数值的符号,如果数值大于0则返回1,
如果数值等于0则返回0,如果数值小于0则返回-1.
结果的精确度与参数有关
select FName,FWeight-48.68,SIGN(FWeight-48.68),SIGN(1),SIGN(1.000) from T_Person
20.求整除余数 %
select FName,FWeight%5 from T_Person
21.求自然对数
LOG()
select FName,LOG(FWeight),LOG(1.00) from T_Person
22.求以10为底的对数
LOG10()
select FName,Fweight,LOG10(FWeight),LOG10(100) from T_Person


ps:

主要参照《程序员的sql金典》
实例有所改动。
T_Person表的创建

代码如下:

 
create table T_Person 
( 
FIdNumber varchar(20),FName varchar(20),FBirthDay datetime,FRegDay datetime,FWeight numeric(10,) 

SQL Server 安装了Sql2000的基础上安装Sql2005的详细过程

SQL Server 安装了Sql2000的基础上安装Sql2005的详细过程

感兴趣的小伙伴,下面一起跟随小编 jb51.cc的小编两巴掌来看看吧!

sql2005版本:sql2005开发版,两张CD的那种

操作系统:Window 2003 Server

假设您的电脑已安装了sql2000,下面开始安装sql2005。

一、运行光盘1

 


【图片暂缺】
跳过 准备 步骤,直接进行“服务器组件、工具、联机丛书和示例”的安装。

接着是许可协议,当然选择“我接受许可条款和条件”,不选择就没得装了。
然后是sqlserver进行安装前的支持组件安装、扫描计算机配置,接着才进入安装向导。
在安装向导里,sqlserver 2005安装程序会对系统进行配置检查,这一关是否能过就要看你电脑的配置情况了,一般不是太古老的机子应该都没有问题。
接下来输入注册信息;选择要安装的组件,这里我们只选择sql Server Database Services组件,其他的用不着。在这个过程中我们可以点击高级按钮来选择安装路径。

【图片暂缺】
接下来在
实例名中这是比较关键的一步,如果机子上没有别的sql版本的,选择默认实例名就行了,但是由于我本上原装有sql2000,所以这一步得选新实例名,然后输入实例名,实例名可以由A-Za-z16位字母组成。

 

【图片暂缺】
接着就下一步,到
服认证模式选用混合认证模式,同时设置sa密码;剩下部分的安装都选默认值,一路下一步,最后安装,完成。

此时完成后,没有出现sql Server Management Studio工具,我们还需要安装第二张盘。

运行光盘2

 

【图片暂缺】
点击仅工具、联机丛书和示例进行安装,又是同样的步骤,同意、下一步、下一步、下一步、注册信息填写,下一步。
接着我们进入最重要的一步:功能选择。这里必须将客户端组件全部选择安装至本地。

 

【图片暂缺】
接下来一路回车下去,完成安装。

打开开始〉〉〉程序〉〉〉sql Server 2005中终于看到了sql Server Management Studio。
到处,sql 2005共存数据库安装完成

sql-server – 如何为SQL Server 2008创建链接服务器,其中有2000和2005的数据库

sql-server – 如何为SQL Server 2008创建链接服务器,其中有2000和2005的数据库

目前我正在从事sql Server 2000,2005& 2008年,我的要求是,
数据库可用于sql Server 2000& 2005年将在2008年使用链接服务器.

假设我在sql Server 2000中有一个名为LIVE_2000的数据库,在sql Server 2005中称为LIVE_2005,有人可以帮助我将LIVE_2000和LIVE_2005的链接服务器创建到sql Server 2008中?

第一件事是甚么可能的?

提前感谢…

解决方法

有一个 few different ways可以在sql Server中创建一个链接的服务器,您可以使用sql Server Management Studio中的GUI或通过脚本.

使用instructions on MSDN可以执行以下操作:

  1. Click Start,click All Programs,click Microsoft sql Server 2005 or Microsoft sql Server 2008,and then click sql Server Management Studio.

  2. In the Connect to Server dialog Box,specify the name of the appropriate sql Server,and then click Connect.

  3. In sql Server Management Studio,double-click Server Objects,right-click Linked Servers,and then click New Linked Server.

  4. In the New Linked Server dialog Box,on the General page,in Linked Server,enter the full network name of the sql Serveryou want to link to.

  5. Under Server type,click sql Server.

  6. In the left pane of the New Linked Server dialog,under Select a page,choose Security.

  7. You will need to map a local server login to a Remote Server login. On the right side of the Security page,click the Add button.

  8. Under Local Login,select a local login account to connect to the Remote Server. Check Impersonate if the local login also exists on the Remote Server. Alternatively,if the local login will be mapped to a remote sql Server login you must supply the Remote User name and Remote Password for the Remote Server login.

  9. In the left pane of the New Linked Server dialog,choose Server Options. Set the Rpc and Rpc Out parameters to True,and then click OK.

另一种方法是使用Transact sql编写查询以使用存储过程sp_addlinkedserver设置服务器

EXEC sp_addlinkedserver   
   @server='yourServer',@srvproduct='',@provider='sqlNCLI',@datasrc='yourServer\instance1';

任一版本都将设置链接服务器,然后您可以在代码中引用该服务器.

我们今天的关于SQL Server 2005基础知识详细整理sql server 2005使用教程的分享就到这里,谢谢您的阅读,如果想了解更多关于SQL Server 2005 基础知识整理、SQL Server SERVER 2005 数学函数整理、SQL Server 安装了Sql2000的基础上安装Sql2005的详细过程、sql-server – 如何为SQL Server 2008创建链接服务器,其中有2000和2005的数据库的相关信息,可以在本站进行搜索。

本文标签: