最近看了一些面试题,这些问题在我目前所做的项目中,几乎都没有运用到。应该是自己知识面太窄了,不管在实战中能否用到,我觉得还是有必要看看,即能扩展知识面,又能为面试打基础,何乐而不为呢!面试题具体如下(附答案):
一、关于SQL Server 2000
1.服务器1 上一个数据库server1.data1,data1中有一个表 table1;服务器2 上有一个
server2.data2,data2中有一个表 table2,如何实现两个表之间的 inner join?
分析:
此问主要考察的是如何在一个服务器上查询另一个服务器中的数据。
下面以 Pubs 数据库中titles表和 publishers表做示例演示:
服务器1的地址:本机 数据库:pubs 表:titles
服务器2的地址:192.168.1.12 数据库:pubs 表:publishers
SELECT *
FROM titles AS t
INNER JOIN OPENROWSET(‘MSDASQL’,DRIVER={SQL Server};
Server=192.168.1.12;
UID=sa;PWD=’,pubs.dbo.publishers) AS p
ON t.pub_id = p.pub_id
2.如何提取一个字段的所有约束名称?
分析:
sysobjects 表
在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。
列举一些重要字段:
name sysname 对象名
id int 对象标识符
uid smallint 所有对象所有者的id
xtype char(2) 对象类型(C=CHECK约束 D=DEFAULT约束 F=FOREIGN KEY约束 U=用户表等)
type char(2) 和xtype几乎一致,自己也不清楚有什么区别
parent_obj int 父对象的对象标识号(例如对于触发器或约束,该标识号为表ID)
syscomments 表
包含每个视图、规则、默认值、触发器、CHECK 约束、DEFAULT 约束和存储过程的项。
text 列包含原始 SQL 定义语句,其最大大小限制为 4 MB。该表存储在每个数据库中。
列举一些重要字段:
id int 该文本适用的对象id
ctext varbinary(8000) SQL定义语句的实际文本
text nvarchar(4000) SQL定义语句的实际文本
texttype smallint 0 用户提供的注释 1 系统提供的注释 4 加密注释
下面通过查询上面两张系统表来实现:
SELECT sysobjects.name
FROM syscomments
INNER JOIN sysobjects
ON syscomments.id = sysobjects.id
WHERE text LIKE ‘%id%’ AND sysobjects.xtype=’c’
3. 从数据库中提取一个表的所有字段名称、类型、约束?
分析:
syscolumns 表
每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表
位于每个数据库中。
列举一些重要字段:
name sysname 列名或过程参数名
id int 该列所属表的对象ID,或与该参数关联的存储过程的ID
xtype tinyint systypes中的物理存储类型
length smallint systypes 中的最大物理存储长度
systypes 表
对于每种系统提供的数据类型和用户定义的数据类型,均包含一行信息。该表存储在每个
数据库中
列举一些重要字段:
name sysname 数据类型名称
xtype tinyint 物理存储类型
length smallint systypes 数据类型的物理存储长度
allownulls bit 指出此数据类型的默认为空性。如果CREATE TABLE 或 ALTER TABLE指定了
为空性,那么该值将替代此数据类型的默认为空性。
UNION 运算符使您得以将两个或多个 SELECT 语句的结果组合成一个结果集。
使用 UNION 组合的结果集都必须具有相同的结构。而且它们的列数必须相同,并且相
应的结果集列的数据类型必须兼容。
以查询pubs数据库的jobs表为例:
SELECT syscolumns.name,systypes.name
FROM(syscolumns inner join sysobjects on syscolumns.id = sysobjects.id),systypes
WHERE sysobjects.name = ‘jobs’ AND systypes.xtype = ‘u’
UNION
SELECT sysobjects.name,’约束名’
FROM sysobjects
WHERE sysobjects.xtype = ‘c’ AND sysobjects.parent_obj =
SELECT id FROM sysobjects WHERE name = ‘jobs’)
http://blog.sina.com.cn/s/articlelist_1237224282_0_1.html