关键词:SqlServer面试题 数据库面试题 DBA面试题
本文地址:http://www.teecool.com/post/2007080304.html
内容正文:
将列更新从一个表传递到另一个表
更新日期: 2002年10月28日
本技巧摘自SQL Server杂志的一期。如需了解更多的技巧,请访问SQL Server的使用技巧中心。
问:怎样在一个Update语句中使用表B的三个列更新表A中的三个列?
答:对这个问题,您可以使用强大的关系代数。本页中的代码说明了如何组合使用FROM子句和JOIN操作,以达到用其他表中数据更新指定列的目的。在设计关系表达式时,您需要决定是否需要单一行匹配多个行(一对多关系),或者需要多个行匹配被联接表中的单一行以更新所有行(多对一关系)。
在一对多关系中,SQL Server始终使用它找到的最后一行更新数据。但是,您无法控制最后一行所在的位置。在多处理器的计算机上,查询可能是同步进行的,相同的查询最后一行的位置可能会不同。因此,Microsoft建议尽量不要使用一对多关系。
如果待更新的表与FROM子句中的表相同,并且FROM子句只包含对该表的一个引用,别名可能未被指定。如果待更新的表在FROM子句中出现了多次,只有该表的一个引用可以省略表的别名,对该表的所有其他引用必须包含一个表别名。
USE tempdb
GO
Create TABLE #t1 (c1 int NOT NULL, c2 char(5), c3 char(5),
c4 char(5))
GO
Create TABLE #t2 (c1 int NOT NULL, c2 char(5), c3 char(5),
c4 char(5))
GO
--数据赋值
Insert #t1 values (1,'hello','there','fred')
Insert #t2 values (1,'how','are','you?')
--更新数据
Update #t1 SET #t1.c2 = #t2.c2, #t1.c3 = #t2.c3,
#t1.c4 = #t2.c4
FROM #t2
Where #t1.c1 = #t2.c1
--检查结果
Select * FROM #t1
—Microsoft SQL Server开发团队
---------------------------------------------------------------------------
回滚事务日志文件中的事务
更新日期: 2002年7月22日
本技巧摘自SQL Server杂志的一期。如需了解更多的技巧,请访问SQL Server的使用技巧中心。
问:怎样使用Transact-SQL回滚某个位于事务日志文件中的事务(例如,ID 0000:0010a183)?
答:出于预防数据错误的考虑,SQL Server并不支持个别事务的回滚。举例来说,假设两个事务T1和T2使用现金余额域。T1添加了500美金,T2使用更新后的值进行了某个操作。如果回滚T1,则T2可能是错误的。但是,您可以使用时间戳或事务日志标记将日志恢复至预定义的标记或时间点。以下两个例子说明了如何使用SQL Server 2000语法。
例1:使用时间戳将日志进行时点恢复
使用以前的完全备份恢复数据库,并使其为日志恢复做好准备。
RESTORE DATABASE pubs FROM DISK = N'C:\Backups\Fullbackup.bak' WITH NORECOVERY
现在您可以将日志前滚到合适的时间点,并使数据库可供使用。请注意,STOPAT在数据库正在执行大容量日志时禁止执行。
RESTORE LOG pubs FROM DISK=N'C:\Backups\Logbackup.bak' WITH RECOVERY,STOPAT='02/11/2002 17:35:00'
例2:使用数据库标记将日志恢复到预定义时间点的语句
在事务日志中置入一个标记。请注意,被标记的事务至少须提交一个更新,以标记该日志。
BEGIN TRAN MyMark WITH MARK
Update pubs.dbo.LastLogMark SET MarkTime = GETDATE()
COMMIT TRAN MyMark
按照您常用的方法备份事务日志。
BACKUP LOG pubs TO DISK='C:\Backups\Fullbackup.bak' WITH INIT
现在您可以将数据库恢复至日志标记点。首先恢复数据库,并使其为接受日志恢复做好准备。
RESTORE DATABASE pubs FROM DISK=N'C:\Backups\Fullbackup.bak' WITH NORECOVERY
现在将日志恢复至包含该标记的时间点,并使其可供使用。请注意,STOPAT在数据库正在执行大容量日志时禁止执行。
RESTORE LOG pubs FROM DISK=N'C:\Backups\Logbackup.bak' WITH RECOVERY,
STOPAT='02/11/2002 17:35:00'
—Microsoft SQL Server 开发团队
--------------------------------------------------------------------------
打开UDP端口1434以浏览命名实例
更新日期: 2003年5月12日
本技巧摘自SQL Server杂志的一期。如需了解更多的技巧,请访问SQL Server的使用技巧中心。
问:本地的一个ISP托管了我们的SQL Server,但是我不能看到或连接到运行在该计算机上的命名实例。我知道SQL Server 2000命名实例不使用TCP/IP 1433端口,并且确定该SQL Server实例所使用的TCP/IP端口是打开的。您有什么建议吗?
答:许多人知道如何使用SQL Server网络实用工具或SQL Server错误日志来确定SQL Server实例的监听端口。但许多人似乎忘记或者根本不知道——UDP 1434端口也必须是打开的,以确保您能够正确地访问和浏览命名实例。我建议您仔细研究一下这一要求。在SQL Server在线书籍中搜索“1434”,您将得到三个颇有研究价值的搜索结果。在SQL Server杂志网站2001年7月刊我的SQL Server实用技巧专栏中,您还可以查找到有关访问命名实例的信息(InstantDoc ID 21127)。在此我也简单解释一下。SQL Server在UDP 1434端口上建立一个监听服务,让客户端从服务器上查询到命名实例及其网络配置信息的一个列表。该监听服务始终运行在UDP 1434端口上,并且用户无法更改该运行端口。
—Brian Moran
--------------------------------------------------------------------------
如何使用系统管理员帐户管理多个开发人员?
更新日期: 2002年12月16日
本技巧摘自SQL Server杂志的一期。如需了解更多的技巧,请访问SQL Server的使用技巧中心。
问:在我们的开发环境下,每个人都有系统管理员(sa)密码,5个组使用一个数据库。在某个开发人员不小心删除了数据后,我没有办法确定谁删除哪一块数据。当开发人员更新数据库中的数据时,如何审核工作站或登录ID?
答:因为您工作于开发环境下,使用SQL事件探查器和服务器跟踪所带来的性能损失并不会影响生产环境,所以您可以设置一个服务器跟踪,在后台将信息记录在一个表中。然后,您可以搜索该表以确定谁删除了数据。
显然,一次为多个用户分配sa账户会带来许多问题。以下是您应该采取的一些措施:
为每个开发团队创建该数据库的一份拷贝,为每个团队提供一个仅数据库拥有者才有访问权的账户。这样的话,他们就不会互相影响了。
如果每个开发人员都需要sa访问权(例如运行SQL事件探查器跟踪),并且您运行的是SQL Server 2000 Enterprise或Developer Edition,您可以为每个团队提供SQL Server的一个实例及其专用的sa密码。
考虑为每个项目设置一个开发环境,并以一个集成环境的方式由一个版本数据库管理员对所有项目间冲突进行管理。这样的话,因为架构改变脚本在进入集成环境之前已经经过了测试,生产版本的质量将有所改善。
—The Microsoft SQL Server开发团队
--------------------------------------------------------------------------
防止锁定升级
更新日期: 2001年9月17日
本技巧摘自SQL Server杂志的一期。如需了解更多的技巧,请访问SQL Server的使用技巧中心。
问:如何防止SQL Server将锁升级?
答:SQL Server使用锁来保持事务在数据库内部的完整性和一致性。SQL Server支持具有不同粒度的多种锁类型。例如,行锁是一个高级锁,而页锁是一个低级锁。SQL Server自动将大量的高级锁升级为少量的低级锁,从而降低系统开销,但同时也可能导致应用程序内不可预测的阻塞。
升级在锁的数量超过锁升级极限时自动进行。这一极限是一个内部设置,设计用于保护系统资源。该极限值不能由用户设置,但在以跟踪标记1211(无文档记载)启动SQL Server时,该锁升级将被禁用。
请注意,如果禁用了锁升级,管理系统的职责将由您承担。如果SQL Server内存不足,系统可能会崩溃。一个更好的解决方案为,如果肯定需要行级锁,可以执行较短的事务。
--SQL Server MVPs
--------------------------------------------------------------------------
使用SQL Server导入和索引 Microsoft Word 文档
更新日期: 2003年7月25日
本技巧摘自SQL Server杂志的一期。如需了解更多的技巧,请访问SQL Server的使用技巧中心。
问:我需要将Microsoft Word文档导入至SQL Server并索引这些文档,以便在关系查询中使用这些文档。怎样导入和索引文档呢?
答:SQL Server允许您以多种方式导入Word文档。让我们看看几种最常用的方法。请注意,在将文档导入至SQL Server之前,您需要创建一个image数据类型列,用于存放数据。然后,您可以使用textcopy.exe命令行工具将image文件读入数据库,从而完成文档的导入操作。如果需要该工具的基本说明文档,请在命令提示状态下键入textcopy /?。将Word文档导入SQL Server的另一个方法是使用Microsoft ActiveX Directory Object(ADO)Stream接口编写导入代码。您可以在Microsoft产品支持服务(PSS)的通过使用ADO Stream对象访问和修改SQL Server BLOB数据一文中找到示例代码。
此外,您也可以将二进制数据移到SQL Server中。有关这一方法的详细说明,请参阅PSS的使用ADO检索和更新SQL Server文本域一文。移动二进制数据允许您将数据的一部分存放在数据库中,这在需要控制数据格式时尤其有用。例如,如果只需要数据中1,000到1,010之间的字节,导入二进制数据的速度远远高于使用ADO Stream接口的速度,这是由于SQL Server从磁盘上检索数据的量大为减少。人们通常使用这一技术来存储位掩码,用于表示应用程序的开或关标志位。
SQL Server 2000自带了说明了如何移动二进制数据的示例代码。如需查看该代码,只需在安装有SQL Server 2000光盘上代码示例的驱动器上选择 \Program Files\Microsoft SQL Server\80\Tools\DevTools\Samples\ado路径。展开该可执行文件,在Visual Basic目录下查找Samples子目录。在Employee示例下,注意一下该代码是如何使用FillDataFields()函数的。
如需索引Word文档,SQL Server 7.0和SQL Server 2000都提供了全文搜索组件。该组件混合使用了多种技术,用以索引大型文本和image列。在执行全文搜索时,您需要指定image列所含的文件类型,以及从二进制数据中析取信息所需的筛选(filter)。有关使用全文索引的详细信息,请参阅SQL Server在线书籍中的相关主题,并阅读David Jones 2000年7月发表在SQL Server杂志网站上的名为构建更好的搜索引擎一文。请注意,索引Word文档并不会自动生成包含文档中关键字的一组关系表。但是,索引文件让您将这些Word文档包含在您的搜索中。以下是从数据中析取关键字的可行方式:
使用OLE自动处理从文档中读取用户定义的关键字。在装载该文档时将这些关键字保存在关系表中。
使用OLE自动处理打开文档并将其保存为文本(.txt)格式。为了析取重要的词语,您可以使用自己的“词语分析器”遍历该文本文件。文字分析器查看文档中的每个词语,去除一些无用文字,并将每个唯一的词语与其出现的次数一道存储起来。
在新的全文索引文档中搜索特定的关键字,并将这些关键字输入到关系表中。
SQL Server 2000提供了多个强大的工具和接口,用于帮助用户实现二进制Microsoft Office文档的快速装载、搜索和检索。
—SQL Server 开发团队
SqlServer面试题(实际应用二)一文有面试题库网收集自互联网,并非本站原创,如原作者发现SqlServer面试题(实际应用二)一文,请及时告知本站,本站会作出相关处理,谢谢!!!(联系方式:百度空间留言)