康索特软件有限公司 SQL Server 2005数据库技能培训
触发器的滥用会造成数据库及应用程序的维护困难。
八 面试注意事项
8.1 面试题
8.1.1 SQL Server数据库的物理结构包含哪几部分?
包含:数据文件和日志文件,数据文件为mdf文件格式,日志文件为ldf文件格式。 日志文件和数据文件应该分开放到不到盘符下,以减少IO竞争。 数据文件和日志文件大小可以自动增长。
8.1.2 谈谈你对SQL Server链接服务器的理解?
SQL Server需要创建链接服务器来建立与不同服务器的链接,来实现与这些服务器的分布式查询。
只有创建好了链接服务器,才能实现跨服务器,跨数据库的链接查询。
8.1.3 谈谈你对SQL Server作业的理解?
作业是由 SQL Server 代理程序按顺序定时执行的一系列指定的操作。 可利用作业执行经常重复和可调度的任务。 作业的用途:
比如可定时执行存储过程;定时备份和收缩数据库等。
8.1.4 SQL Server中哪个用户的权限最大?
Sa用户的权限最大。但从安全考虑,在现场一般不用sa用户来操作数据库。
8.1.5 列举常用的DML和DDL语言?
常用的DML:SELECT;INSERT INTO;UPDATE;DELETE 常用的DDL:ADD;ALTER;DROP
8.1.6 SQL Server中表自增ID和自增列的区别和各自的用法?
自增ID为表中本身设计时就有的字段,而自增列是表中本身没有的字段,后来为查询需要而新增的一列。
自增ID用法:id int identity(1,1) not null,
自增列用法:SELECT row_number() over (order by 字段名) as 别名 FROM 表名 自增列为SQL Server 2005新特性。
8.1.7 SQL Server中如何判断表中某字段是否存在?
地址:武汉洪山区武大科技园兴业楼南楼二单元402室 电话:027-87970489
康索特软件有限公司 SQL Server 2005数据库技能培训
通过系统表syscolumns完成:
SELECT * FROM syscolumns WHERE id = object_id('ssrv_cdr11') and name='part_time' 若查询出有数据,说明ssrv_cdr11表中存在part_time字段。
8.1.8 SQL Server中索引分哪几种?请加以详细介绍。
索引分两种:聚集索引和非聚集索引
聚集索引在表中只能有一个,非聚集索引可以由多个。
8.1.9 谈谈使用索引的代价。
使用索引后的代价:
1. 索引需要占用数据表以外的物理存储空间。 2. 创建索引和维护索引要花费一定的时间。
3. 当对表进行更新操作时,索引会被重建,这样就降低了数据的维护速度。
8.1.10 主键索引和唯一索引的区别?
主键索引只能有一个,而唯一索引可以有多个; 主键索引列不允许空值,唯一索引列允许空值。
8.1.11 SQL Server中一张表能创建几个聚集索引?
只能创建一个集聚索引,非集聚索引可以有多个。
主键索引可以是聚集的也可以是非聚集的索引。一般情况下,我们在SQL Server中对索引字段只创建聚集和非聚集索引,而不利用约束来为该字段创建索引。
8.1.12 where 子句中索引字段a后可否用<>或!=操作符?请说明原因。
不可用,用后索引失效,而进行全表扫描。
8.1.13 where 子句中索引字段a和b为索引字段,能否用or来连接这两字段?请
说明原因。
不可用,用后索引失效,而进行全表扫描。
8.1.14 索引字段中可否跟IN或not in?请说明原因。
不可用,用后索引失效,而进行全表扫描。
8.1.15 where 子句中可否对索引字段进行表达式操作?请说明原因。
不可用,用后索引失效,而进行全表扫描。
8.1.16 where 子句中可否对索引字段进行like操作。
地址:武汉洪山区武大科技园兴业楼南楼二单元402室 电话:027-87970489
康索特软件有限公司 SQL Server 2005数据库技能培训
可以,但%要在打头字母后。
8.1.17 常用的多表关联有哪些?
左关联,右关联,自关联,内关联,全关联,交叉关联。
8.1.18 左关联出来的数据哪张表中数据全部展示?
左边的表。
8.1.19 怎么关联能提高关联性能?
On字句中把关联条件写齐,可加快关联速度。
8.1.20 SQL Server临时表分哪几类?谈谈他们之间的区别?
临时表分:
本地临时表,以#打头; 全局临时表,以##打头。 临时表以会话为边界:以#前缀的临时表为本地的,因此只有在当前用户会话中才可以访问,当当前用户会话结束,本地临时表即被自动删除;而##前缀的临时表是全局的,因此所有用户会话都可以访问,只有当所有用户会话结束,全局临时表才能被删除。
8.1.21 SQL Server中临时表怎么使用?
以创建本地临时表为例:
IF OBJECT_ID('tempdb..#subtemptb') IS NOT NULL
DROP TABLE #subtemptb CREATE TABLE #subtemptb(……)
8.1.22 SQL Server中如何修改视图?
ALTER VIEW 视图名
8.1.23 视图中可否创建索引?
可以。但没有表中索引性能高。
8.1.24 介绍下SQL Server中存储过程的写法?对其结构加以说明。
有两种写法:
统计存储过程和查询存储过程,具体见“5.1存储过程”介绍。
8.1.25 SQL Server中如何申明变量?怎么对变量赋值?
地址:武汉洪山区武大科技园兴业楼南楼二单元402室 电话:027-87970489
康索特软件有限公司 SQL Server 2005数据库技能培训
DECLARE @starttime DATETIME, -- 申明变量1 @endtime VARCHAR(20), -- 申明变量1 ….. -- 申明其他变量 SELECT @starttime = getdate() -- 赋值语句 或者:
SET @starttime = getdate() -- SET也可以赋值
8.1.26 返回参数和OUTPUT参数之间的区别是什么?
返回参数总是由存储过程返回,它用来表示存储过程是成功还是失败。返回参数总是INT数据类型。
OUTPUT参数明确要求由开发人员来指定,它可以返回其他类型的数据,例如字符型和数值型的值。(可以用作输出参数的数据类型是有一些限制的。如:N'@ret BIGINT OUTPUT') 一个存储过程里可以使用多个OUTPUT参数,但只能够使用一个返回参数。
8.1.27 SQL Server中exists关键字怎么使用?说说他的最佳使用场所?
exists使用:
IF EXISTS (‘select ….’) IS NULL ……. 一般用在判断表中是否有记录。
8.1.28 SQL Server中链接查询怎么使用?数据源于哪?
首先要建立链接服务器,具体操作见“2.2.7添加链接服务器”。 链接查询语法:
SELECT @startid = minid
FROM OPENQUERY(CDSzxin,
'select min(synclogindex) minid from zxdbm_ismp.sync_info_log') 数据源于链接服务器所在的数据库表。
8.1.29 SQL Server中动态SQL怎么使用?
语法:
1. 申明变量; 2. 为该变量赋值; 3. 执行变量。 举例:
DECLARE @sql varchar(2000) --申明变量 SELECT @sql = 'INSERT INTO …' -- 赋值 EXEC (@sql) -- 执行
8.1.30 SQL Server中怎么给动态SQL中的变量赋值?
语法:
地址:武汉洪山区武大科技园兴业楼南楼二单元402室 电话:027-87970489
康索特软件有限公司 SQL Server 2005数据库技能培训
DECLARE @count BIGINT
SET @sql = 'SELECT @ret=COUNT(1) FROM ' + @table -- 必须为@ret(内部变量) EXEC sp_executesql @sql, N'@ret BIGINT OUTPUT', @ret = @count OUTPUT
8.1.31 SQL Server中异常捕捉机制怎么使用?
8.1.32 SQL Server中事务处理机制在什么场所下使用?怎么使用?
首先需在try块中使用。
其次要在小范围查询中使用。
8.1.33 查询中若出现错误,怎么查找错误原因?
通过异常捕获机制来捕获错误,错误信息由系统内部函数ERROR_MESSAGE() 提供; 用户可以通过创建一张日志表,讲错误信息插入日志表; 最后通过查询日志表信息来查询错误原因。
8.1.34 列举几个常用的内部扩展存储过程?
具体见“5.3内部存储过程”说明。
8.1.35 列举几个常用的内部函数?
具体见“6.1内部函数”说明。
8.1.36 SQL Server中用户自定义函数怎么创建和使用?
具体见“6.2自定义函数”说明。
地址:武汉洪山区武大科技园兴业楼南楼二单元402室 电话:027-87970489