SQL Server开发过程中的十种常见问题总结(1)

日期: 2008-08-03 作者:璞玉 来源:TechTarget中国 英文

在SQL Server开发问题中你可能会问到的十个问题:


1、什么是常见的对表和字段的名字约束? 
  2、有没有可能在不了解T-SQL的情况下编写存储过程?
  3、T-SQL中如何比较CLR存储过程和函数的性能?
  4、我如何在一个存储过程中使用另一个存储过程产生的结果?
  5、我如何解决SQL Server 2005的并发问题?
  6、在SQL Server 2005中用什么工具替代了查询分析器?
  7、你能提供一些有关SQL 和T-SQL的详细信息吗?
  8、SQL Server 2005有没有新的索引类型?
  9、我如何创建一个脚本在表中进行选择?
  10、我如何列出那些没有记录的数据库表?


对于表和字段的常见名字约束


回答:


回答:


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


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


· Unicode Standard 2.0中规定的字母。


Unicode对字母的定义包括:拉丁字母,从A到Z,除了来自其他语言的字母之外。


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


在SQL Server中以这些符号作为标识符的开始具有特殊的含义。一个以at符号(@)开头的标识符表示一个本地的变量或者参数。一个以数字符号(#)开头的标识符代表一个临时表或者过程。一个以两个数字符号(##)开头的标识符标识的是一个全局临时对象。


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


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


· Unicode Standard 2.0定义的字母


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


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


标识符绝对不能是Transact-SQL的保留字。SQL Server保留了一些大写和小写的保留字。内建的空间或者特殊的字母都不允许出现,尽管你可以在好的老版本的Northwind中看到它们包含了内建的空间。你必须通过把它们括在括号中才可以访问。


不具有任何T-SQL知识的情况下编写SQL Server2005存储过程吗?


许多程序员都认为创建SQL Server存储过程不再必需T-SQL了。不幸的是(或者并非如此,这根据你的观点),这并不全是事实。在技术上是可以在不了解T-SQL的情况下创建存储过程的,但是没有T-SQL的话则无法访问任何的数据。


在CLR存储过程内部进行数据访问,是通过使用标准的ADO.NET类来完成的。开发人员会在应用程序层发现很多同样的没有用处的数据访问代码,这些代码会很轻易地转移到SQLCLR例程中去。当中间层的这些ADO.NET类需要使用T-SQL来访问数据的时候,在 CLR主机提供的环境中就会使用同样的类。


我要强调的是,从技术角度来说,不使用T-SQL来编写存储过程是可能的。那么有没有理由这么做呢?一种情况就是这是一个用来从普通文件或者网络服务中检索数据的CLR存储过程,并将数据格式设置为行集。这里可能就会用到不需要T-SQL的操作——但是这并不是对T -SQL存储过程能力的一个很好的比喻。


CLR存储过程vs. T-SQL存储过程


CLR存储过程和函数与T-SQL存储过程和函数相比,性能如何?


回答:


这里是用来比较T-SQL例程和CLR例程性能的一种常用的规则:用你的数据,在你的服务器上,测试两套配置,看看哪一个比较好。


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


SQL Server 的专家Gustavo Larriera编辑了如下一些关于这个主题的有用链接:


·在 SQL Server 2005中使用CLR Integration。


·简单介绍在 SQL Server 2005中的 CLR Integration。


·在 SQL Server 2005中对CLR 和T-SQL做出选择。


·介绍 SQL Server 2005中的 CLR Integration。


·SQL Server 闲谈: SQL Server 2005 Beta 2 CLR问题与回答。


·数据库管理员的防御.NET。


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


如何在一个存储过程中使用另一个存储过程的结果?


专家回答:


只要存储过程只产生了一个单个的结果,要在另外一个存储过程中使用这个存储过程产生的输出,这个技术是非常直接的。这个技术就是使用一个临时表来装载存储过程的巨额iguo,然后通过insert &#101xec语句来执行这个过程并保存结果。一旦结果保留在临时表中了,他们就可以像使用其它表数据一样来使用它了。


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


create PROC usp_Demo_AllAuthors as select * from pubs..authors GO    


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







create proc usp_Demo_SPUser as create TABLE #Authors (
au_id varchar(11) NOT NULL PRIMARY KEY CLUSTERED,
au_lname varchar (40) NOT NULL ,
au_fname varchar (20) NOT NULL ,
phone char (12) NOT NULL,
address varchar (40) NULL ,
city varchar (20) NULL ,
state char (2) NULL ,
zip char (5) NULL ,
contract bit NOT NULL
)– &#101xecute usp_Demo_AllAuthors storing the
– results in #Authors
insert into #Authors
&#101xec usp_Demo_AllAuthors– Here we use the #Authors table. This example only
– only selects from the temp table but you could do much
– more such as use a cursor on the table or join with
– other data.
select au_fName + ‘ ‘ + au_lname as [name]
, address+’, ‘+city+’, ‘+state+’ ‘+zip [Addr]
from #Authorsdrop TABLE #Authors
GO   

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐

  • Azure数据湖分析从U-SQL中获得提升

    大数据的发展已经让许多精通SQL的数据专业人员不知所措。微软的U-SQL编程语言试图让这些人回归数据查询游戏。

  • TT百科:SQL(结构化查询语言)

    一般来说,SQL-on-Hadoop仍是一项新兴技术,但随着各个公司寻求获得拥有大数据应用程序编程SQL技能的开发和分析人员,它们正逐渐成为Hadoop部署的固定组件。

  • SQL和NoSQL数据库设计之争

    企业收集了很多大规模增长的松散结构化数据,Hadoop,Spark以及其他新技术处理这些数据非常有助于改善商业智能分析效率。

  • SQL Server 2016新变化:内存中OLTP功能大改进

    SQL Server 2016的许多功能得到改进,内存中OLTP(in-memory OLTP)也不例外,包括扩展性、性能以及扩展T-SQL用于使用和管理内存优化表的功能方面。