SQL问题集及解决办法.docx

上传人:b****5 文档编号:2854518 上传时间:2022-11-16 格式:DOCX 页数:7 大小:20.14KB
下载 相关 举报
SQL问题集及解决办法.docx_第1页
第1页 / 共7页
SQL问题集及解决办法.docx_第2页
第2页 / 共7页
SQL问题集及解决办法.docx_第3页
第3页 / 共7页
SQL问题集及解决办法.docx_第4页
第4页 / 共7页
SQL问题集及解决办法.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

SQL问题集及解决办法.docx

《SQL问题集及解决办法.docx》由会员分享,可在线阅读,更多相关《SQL问题集及解决办法.docx(7页珍藏版)》请在冰豆网上搜索。

SQL问题集及解决办法.docx

SQL问题集及解决办法

SQL专家回答

01、什么是常见的对表和字段的名字约束?

02、有没有可能在不了解T-SQL的情况下编写存储过程?

03、T-SQL中如何比较CLR存储过程和函数的性能?

04、我如何在一个存储过程中使用另一个存储过程产生的结果?

05、我如何解决SQLServer2005的并发问题?

06、在SQLServer2005中用什么工具替代了查询分析器?

07、C你能提供一些有关SQL和T-SQL的详细信息吗?

08、SQLServer2005有没有新的索引类型?

09、我如何创建一个脚本在表中进行选择?

10、我如何列出那些没有记录的数据库表?

 

01、对于表和字段的常见名字约束专家回答——

SQLServer2000下的表和字段名称有1到128字节的限制,并且遵循用于标识的规则。

第一个字母必须是如下的一种:

ØUnicodeStandard2.0中规定的字母。

Unicode对字母的定义包括:

拉丁字母,从A到Z,除了来自其他语言的字母之外。

Ø下划线(_),at符号(@),或者数字符号(#)

在SQLServer中以这些符号作为标识符的开始具有特殊的含义。

一个以at符号(@)开头的标识符表示一个本地的变量或者参数。

一个以数字符号(#)开头的标识符代表一个临时表或者过程。

一个以两个数字符号(##)开头的标识符标识的是一个全局临时对象。

一些Transact-SQL函数的名字以两个at符号(@@)开头。

为了避免与这些函数混淆,推荐你不要使用两个at符号(@@)开头的标识符。

接下来的字母可以是以下的任意几种:

ØUnicodeStandard2.0定义的字母

Ø来自基础拉丁文或者其他语音的十进制数字

Øat符号(@),美元符号($),数字符号(#),或者下划线

标识符绝对不能是Transact-SQL的保留字。

SQLServer保留了一些大写和小写的保留字。

内建的空间或者特殊的字母都不允许出现,尽管你可以在好的老版本的Northwind中看到它们包含了内建的空间。

你必须通过把它们括在括号中才可以访问。

02、我可以在不具有任何T-SQL知识的情况下编写SQLServer2005存储过程吗?

专家回答——

作为过去几年里面微软试图用SQLServer2005的.NET集成来称霸市场的野心的结果,许多程序员都认为创建SQLServer存储过程不再必需T-SQL了。

不幸的是(或者并非如此,这根据你的观点),这并不全是事实。

在技术上是可以在不了解T-SQL的情况下创建存储过程的,但是没有T-SQL的话则无法访问任何的数据。

在CLR存储过程内部进行数据访问,是通过使用标准的ADO.NET类来完成的。

开发人员会在应用程序层发现很多同样的没有用处的数据访问代码,这些代码会很轻易地转移到SQLCLR例程中去。

当中间层的这些ADO.NET类需要使用T-SQL来访问数据的时候,在CLR主机提供的环境中就会使用同样的类。

要强调的是,从技术角度来说,不使用T-SQL来编写存储过程是可能的。

那么有没有理由这么做呢?

一种情况就是,这是一个用来从普通文件或者网络服务中检索数据的CLR存储过程,并将数据格式设置为行集。

这里可能就会用到不需要T-SQL的操作——但是这并不是对T-SQL存储过程能力的一个很好的比喻。

03、CLR存储过程vs.T-SQL存储过程专家回答——

这里是用来比较T-SQL例程和CLR例程性能的一种常用的规则:

用你的数据,在你的服务器上,测试两套配置,看看哪一个比较好。

就是说,许多人都运行过性能测试,一般的结果就是T-SQL在标准的CRUD(创建、读取、更新、删除)操作上表现要比好一点,而在复杂数学、字符串赋值和其他的超过数据访问的任务上,则是CLR的性能表现更好一点。

SQLServer的专家GustavoLarriera编辑了如下一些关于这个主题的有用链接:

Ø在SQLServer2005中使用CLRIntegration

Ø简单介绍在SQLServer2005中的CLRIntegration

Ø在SQLServer2005中对CLR和T-SQL做出选择

Ø介绍SQLServer2005中的CLRIntegration

ØSQLServer闲谈:

SQLServer2005Beta2CLR问题与回答

Ø数据库管理员的酒吧门防御.NET大坏狼

Ø用户自定义函数的性能比较

04、如何在一个存储过程中使用另一个存储过程的结果专家回答——

只要存储过程只产生了一个单个的结果,要在另外一个存储过程中使用这个存储过程产生的输出,这个技术是非常直接的。

这个技术就是使用一个临时表来装载存储过程的巨额iguo,然后通过INSERTEXEC语句来执行这个过程并保存结果。

一旦结果保留在临时表中了,他们就可以像使用其它表数据一样来使用它了。

这里是我们可能会复用的一个过程例子:

CREATEPROCusp_Demo_AllAuthors

as

select*frompubs..authors

GO

现在有一个存储过程使用usp_Demo_AllAuthors的结果:

CREATEprocusp_Demo_SPUser

asCREATETABLE#Authors(

au_idvarchar(11)NOTNULLPRIMARYKEYCLUSTERED,

au_lnamevarchar(40)NOTNULL,

au_fnamevarchar(20)NOTNULL,

phonechar(12)NOTNULL,

addressvarchar(40)NULL,

cityvarchar(20)NULL,

statechar

(2)NULL,

zipchar(5)NULL,

contractbitNOTNULL

)–-Executeusp_Demo_AllAuthorsstoringtheresultsin#Authors

insertinto#Authors

execusp_Demo_AllAuthors

-–Hereweusethe#Authorstable.Thisexampleonlyselectsfromthetemptablebutyoucoulddomuchmoresuchasuseacursoronthetableorjoinwithotherdata.

SELECTau_fName+‘‘+au_lnameas[name],address+’,‘+city+’,‘+state+’‘+zip[Addr]from#AuthorsDROPTABLE#Authors

GO

05、SQLServer2005中的存储过程并发问题

在SQLServer2005中遇到了并发问题。

持有车票的公共汽车上有一些空闲的座位。

我在插入销售的查票之前,需要查看是否还有空闲的座位。

我的存储过程做的事情如下所示:

CREATEPROCEDUREadd_ticket—parameters

DECLAREfree_seatsint

BEGINTRANSACTION

SELECTfree_seats=COUNT(*)FROMticketsWHEREseat_is_not_takenIFfree_seats<>0

INSERTINTOticketsVALUES(…)—someotherstatements

ENDTRANSACTION

问题就是两个过程可以同时读取空闲票数,并且都可以预约一张票,即使是那里已经没有空余的了。

我需要一种方法来防止一个过程在另一个过程运行add_ticket程序,但是还没有插入一张新票的时候读取空票的数量。

在这种情况下,SETTRANSACTIONISOLATIONLEVEL不管用了,我说的对吗?

专家回答——

你是正确的;更高的隔离级别也不会保证多个读者去同时去读取同一个数据行。

然而,还有几种方法你可以完成这项工作。

例如,你可以给每个座位分配一个惟一的标识符(意思是惟一键——不一定是GUID),并且创建一个描述哪些座位已经被预订了的表。

在表上放一个UNIQUE约束,你就可以确保同一个座位不会被插入两次了。

就是说,我认为一个更有趣的方法就是使用SQLServiceBroker。

你可以为每个公交建立一个会话,并且将这个会话的句柄存放在一个表中,读者在执行RECEIVE之前可以参考这个表。

通过这种方式,读者就可以正确地过滤。

公共汽车上的每个座位都插一个消息到队列中。

读者就可以简单地RECEIVE到所需的消息(在这个过程中,预定公共汽车上的座位)。

ServiceBroker会确保没有消息会被接受两次,也就是说你不会再遇到并发问题了。

06、SQLServer2005中取代了查询分析器

我知道SQLServer2005中不再会有查询分析器了。

那么还有什么工具具有类似的功能?

专家回答——

你是对的。

查询分析器和企业管理器都从SQLServer中删除了。

取代它们的是一个工具,SQLServer管理套件(SQLServerManagementStudio)。

这个工具具有前任的大多数特性,但是拥有升级后的用户界面和很多经过改善的功能。

我觉得大多数的数据库管理员都会发现这是一个很好的升级。

如果你想要了解更多有关SQLServer管理套件的新特性的信息,请阅读SearchSQLS上有关这个话题的文章。

07、SQLvs.T-SQL

亲爱的AdamMachanic:

你能给我一些有关SQL和T-SQL相比较的详细信息吗?

使用这两者之间的区别和分别的好处是什么?

专家回答——

SQL是结构化查询语言,是ANSI/ISO认可的标准数据库语言。

SQLServer的实现语言叫做Transact-SQL(T-SQL)。

T-SQL基本上是根据1992年发表的ISO标准出现的,在1999年的标准上稍加修改。

此外,微软还进行了各种私有的加强。

标准SQL和T-SQL之间有很多区别--太多了,这里就不说了。

还有,如果你在SQLServer上工作,那么使用这些私有的扩展是有好处的。

由于许多SQLServer的特性的本质,你不使用非标准的命令的话,将会有很多强大的功能无法实现。

如果你想要看看你的SQL是否符合标准,你可以使用SETFIPS_FLAGGER命令。

08、SQLServer2005中的索引类别

SQLServer2005中是否有新的索引类别了?

专家回答——

SQLServer2005没有为关系表引入新的索引类型。

基本上--聚簇和非聚簇索引是以B-trees的方式实现的--还仍然在应用。

然而,SQLServer2005确实包含了一些索引上的加强,不论是完全文本索引,还是对于XML数据,此外这些加强还可以改善一些与关系型索引有关的问题。

SQLServer2005的完全文本索引特性是全新的,并且是重新编写的。

要获得这个特性的信息,请阅读NimishKhanolkar的MSDN广播文档,介绍SQLServer2005中的全文本查找。

XML是SQLServer2005中另外一个在方式上发生了巨大转变的内容。

现在对于开发人员来说有第一流的XML数据类型可用了。

这个类型支持XQuery查询语言,使用了这个类型的字段可以通过特殊格式的XML索引被索引到。

要了解

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 临床医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1