在SQL Server中进行开发会让你身处险地,并且寻找快速解决方案。我们编辑了前十名关于SQL Server开发的常见问题。对常见的针对表和字段的名字约束进行探究。学习如何解决并发问题,并且在不了解T-SQL的情况下编写存储过程。查看这些解决方案的快速参考,并且了解更多内容。 花点时间来会见我们的全体专家,然后看看有关SQL Server主体的全体列表.
Take a moment to meet all of our experts and view the complete list of SQL Server topics.
你可能会问的前十名的SQL Server开发问题:
1、什么是常见的对表和字段的名字约束?
2、有没有可能在不了解T-SQL的情况下编写存储过程?
3、T-SQL 中如何比较CLR 存储过程和函数的性能?
4、我如何在一个存储过程中使用另一个存储过程产生的结果?
5、我如何解决SQL Server 2005的并发问题?
6、在SQL Server 2005中用什么工具替代了查询分析器?
7、C你能提供一些有关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 2005的.NET集成来称霸市场的野心的结果,许多程序员都认为创建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大坏狼
·用户自定义函数的性能比较
如何在一个存储过程中使用另一个存储过程的结果
我编写了一个存储过程在Crystal Report中使用。它工作得很好。我还想在另外一个存储过程中使用这个存储过程产生的结果。我该怎么做?
专家回答:
只要存储过程只产生了一个单个的结果,要在另外一个存储过程中使用这个存储过程产生的输出,这个技术是非常直接的。这个技术就是使用一个临时表来装载存储过程的巨额iguo,然后通过INSERT EXEC语句来执行这个过程并保存结果。一旦结果保留在临时表中了,他们就可以像使用其它表数据一样来使用它了。
这里是我们可能会复用的一个过程例子:
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
)– Execute usp_Demo_AllAuthors storing the
– results in #Authors
insert into #Authors
exec 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
SQL Server 2005中的存储过程并发问题
问题提交于2006年7月26日
我在SQL Server2005中遇到了并发问题。我持有车票的公共汽车上有一些空闲的座位。我在插入销售的查票之前,需要查看是否还有空闲的座位。我的存储过程做的事情如下所示:
CREATE PROCEDURE add_ticket — parameters DECLARE free_seats int BEGIN TRANSACTION SELECT free_seats = COUNT(*) FROM tickets WHERE seat_is_not_taken IF free_seats <> 0 INSERT INTO tickets VALUES(…) — some other statements END TRANSACTION
问题就是两个过程可以同时读取空闲票数,并且都可以预约一张票,即使是那里已经没有空余的了。我需要一种方法来防止一个过程在另一个过程运行add_ticket程序,但是还没有插入一张新票的时候读取空票的数量。在这种情况下,SET TRANSACTION ISOLATION LEVEL不管用了,我说的对吗?
专家回答:
你是正确的;更高的隔离级别也不会保证多个读者去同时去读取同一个数据行。然而,还有几种方法你可以完成这项工作。例如,你可以给每个座位分配一个惟一的标识符(意思是,惟一键——不一定是GUID),并且创建一个描述哪些座位已经被预订了的表。在表上放一个 UNIQUE约束,你就可以确保同一个座位不会被插入两次了。
就是说,我认为一个更有趣的方法就是使用SQL Service Broker。你可以为每个公交建立一个会话,并且将这个会话的句柄存放在一个表中,读者在执行RECEIVE之前可以参考这个表。通过这种方式,读者就可以正确地过滤。公共汽车上的每个座位都插一个消息到队列中。读者就可以简单地RECEIVE到所需的消息(在这个过程中,预定公共汽车上的座位)。 Service Broker会确保没有消息会被接受两次,也就是说你不会再遇到并发问题了。
SQL Server2005中取代了查询分析器
问题提交于2005年12月9日
我知道SQL Server2005中不再会有查询分析器了。那么还有什么工具具有类似的功能?
专家回答:
你是对的。查询分析器和企业管理器都从SQL Server中删除了。取代它们的是一个工具,SQL Server 管理套件(SQL Server Management Studio)。这个工具具有前任的大多数特性,但是拥有升级后的用户界面和很多经过改善的功能。我觉得大多数的数据库管理员都会发现这是一个很好的升级。
如果你想要了解更多有关SQL Server管理套件的新特性的信息,请阅读SearchSQLServer.com 上有关这个话题的文章。
SQL vs. T-SQL
问题提交于2006年7月25日
亲爱的Adam Machanic:你能给我一些有关SQL和 T-SQL相比较的详细信息吗?使用这两者之间的区别和分别的好处是什么?
专家回答:
SQL是结构化查询语言,是ANSI/ISO 认可的标准数据库语言。SQL Server的实现语言叫做Transact-SQL (T-SQL)。T-SQL基本上是根据1992年发表的ISO标准出现的,在1999年的标准上稍加修改。此外,微软还进行了各种私有的加强。
标准SQL和T-SQL之间有很多区别——太多了,这里就不说了。还有,如果你在SQL Server上工作,那么使用这些私有的扩展是有好处的。由于许多SQL Server的特性的本质,你不使用非标准的命令的话,将会有很多强大的功能无法实现。如果你想要看看你的SQL是否符合标准,你可以使用SET FIPS_FLAGGER命令。
SQL Server 2005中的索引类别
问题提交于2005年9月26日
SQL Server 2005中是否有新的索引类别了?
专家回答:
SQL Server 2005没有为关系表引入新的索引类型。基本上——聚簇和非聚簇索引是以B-trees的方式实现的——还仍然在应用。然而,SQL Server 2005确实包含了一些索引上的加强,不论是完全文本索引,还是对于XML数据,此外这些加强还可以改善一些与关系型索引有关的问题。
SQL Server 2005的完全文本索引特性是全新的,并且是重新编写的。要获得这个特性的信息,请阅读Nimish Khanolkar的MSDN广播文档,介绍SQL Server 2005中的全文本查找。
XML是SQL Server 2005中另外一个在方式上发生了巨大转变的内容。现在对于开发人员来说有第一流的XML数据类型可用了。这个类型支持XQuery查询语言,使用了这个类型的字段可以通过特殊格式的XML索引被索引到。要了解更多有关XML类型的信息,请查找MSDN 上的文章。
还有各种各样的有关T-SQL索引命令的加强。也许最令人感兴趣的就是新的“在线”索引类型,它允许数据库管理员在不需要把用户锁到表外面的情况下执行索引维护任务。这个很有可能标记着数据库管理员需要等到夜里3点才能打开维护窗口修正问题的状况的终结!要了解更多有关这个特性的信息,请查找SQL Server Worldwide Users Group 上的文章。
为行选择创建一个脚本
问题提交于2005年12月15日
想象一下这个表:
prod_key item_key pack_key last_sale
LM001 1029 AD100 2004/12/05
LM870 1029 AD100 2005/09/20
PE789 1030 BC400 2003/07/12
PE312 1030 BC400 2004/08/07
我想要选出哪些在item_key 和pack_key相等的情况下,日期比较大的那一行。换句话说,我想要:
LM870 1029 AD100 2005/09/20
PE312 1030 BC400 2004/08/07
你能帮我写出这个脚本吗?
专家回答:
这个表有主键吗?那样的话查询可能会容易些。不管怎么样,我觉得你应该按照下面这样:
SELECT prod_key,item_key,pack_key,last_sale
FROM (SELECT item_key,pack_key,MAX(last_sale) AS last_sale FROM tablex GROUP BY item_key,pack_key) AS MaxDateTable
WHERE tablex.item_key = MaxDateTable.item_key
AND tablex.pack_key = MaxDateTable.pack_key
AND tablex.last_sale = MaxDateTable.last_sale
列出没有记录的数据库表
问题提交于2006年5月16日
我创建了一个动态的SQL Server查询来输出表中行的数量。我的目标是列出在数据库中没有记录的表。查询如下所示:
declare @strsql varchar(100)
declare @tablename varchar(50)
@tablename=’table123′@strsql=’select count(*) from ‘ + @tablename exec(@strsql)
我得到了输出,但是我无法把这个值存储到变量中以备查看。
我想要这样查看:
/* @countvariable=0
print(@tablename)*/
还有其它的解决方法吗?
专家回答:
你可以让你的解决方案更加灵活一些,通过从sysobjects表中抓取表名:
declare @strsql varchar(256)
create table #emptytables (tablename varchar(128), table_rowcount int)select @strsql=’select distinct o.name as TableName, x.rowcnt as Table_RowCount
from sysobjects o
inner join sysindexes x
on o.id = x.id
where x.rowcnt = 0 and
o.type = ‘’U”’insert #emptytables (TableName, Table_rowcount) exec (@strsql)
select * from #emptytables
drop table #emptytables
文章出处:http://www.sqlwhy.com/t_sql/t_sqltips/2009-05-15/88.html
分享到:
相关推荐
SQL Server 是一款由微软公司开发的关系型数据库管理系统(RDBMS),在企业级数据存储、管理和分析中扮演着重要角色。本教程旨在帮助初学者掌握SQL Server的基本概念、操作和开发技巧,使其能够轻松入门。 一、SQL ...
在本安装包中,主要包含的是SSMS(SQL Server Management Studio)的安装文件,这是SQL Server的主要管理和开发工具。 SQL Server 2019引入了多个新特性和增强功能,旨在提高性能、安全性和可扩展性。以下是一些关键...
本资源“SQLSERVER辅助开发”旨在为SQL Server用户提供更便捷的开发体验,通过集成的各种工具,使得数据库的管理和维护变得更加高效。下面将详细阐述这个辅助开发工具的核心功能及其在实际工作中的应用价值。 首先...
SQL Server软件开发工具,集成了开发,管理,基准测试,性能调优等多项功能 支持SQL Server 2000 and 7.0 数据库 ·项目管理·SQL 编辑器·查询生成器·报告作者·格式化程序·显示或隐藏、 排序或筛选器或组表中的...
书第1,2章分别介绍了使用Visual C#和SQL Server开发数据库应用程序的基本知识,第3章~第10章,通过开发8个完整实用的数据库应用程序,系统全面地介绍了用Visual C#和SQL Server来进行数据库应用程序开发的各种技术...
《VC++6.0结合SQL Server开发实例详解》 在软件开发领域,VC++6.0作为经典的Microsoft Visual C++版本,至今仍被许多开发者所青睐,尤其在教学和小型项目开发中。与此同时,SQL Server作为全球领先的数据库管理系统...
《SQL Server 2000开发指南》是一本专为SQL Server 2000开发者设计的详尽参考资料,旨在帮助读者深入理解并熟练掌握这一经典数据库系统的开发技术。SQL Server 2000作为微软公司推出的强大企业级数据库管理系统,自...
【Microsoft SQL Server开发源文件详解】 Microsoft SQL Server是一款由微软公司开发的关系型数据库管理系统(RDBMS),在企业级数据存储、管理和分析方面扮演着重要角色。它支持多种编程语言,如T-SQL(Transact-...
SQL Server连接工具是数据库管理员和开发人员用于与Microsoft SQL Server交互的重要软件。这些工具提供了多种功能,包括数据库的创建、管理、查询、备份、恢复以及性能优化等。在本篇文章中,我们将深入探讨SQL ...
SQL Server Native Client 10.0解决了这个问题,提供了一个专门为64位系统设计的数据源命名(DSN)组件,使得用户可以在64位环境中创建和配置DSN,确保64位应用能够顺畅地连接到SQL Server。 3. **SQL Server 2008 ...
10. **版本更新**:SQL Server Native Client有后续的更新版本,如11.0(对应SQL Server 2012),每个新版本都会带来新的特性和改进,确保与最新SQL Server版本的兼容性。 综上所述,SQL Server Native Client 10.0...
第9章和第10章介绍SQL Server 2005安全性及SQL Server 2005与XML的关系;第11章~13章介绍SQL Server 2005分析服务、集成服务和报表服务;第14章和第15章以使用ASP开发新闻信息管理系统和使用JSP开发电子商务系统为...
标题中的“sqlserver驱动2012版”指的是SQL Server Native Client 2012,这是微软为SQL Server设计的一款数据库访问接口。SQL Server Native Client(简称SQLNCLI)是用于与SQL Server交互的一种客户端库,它包含了...
在本压缩包中,主要包含了一个名为"SQL Server客户端.exe"的可执行文件,这通常是SQL Server Management Studio(SSMS)或一个精简版的客户端工具。 SSMS是微软官方提供的一个集成环境,专为管理和开发SQL Server而...
SQL Management Studio是SQL Server的一个集成开发环境,它为管理员和开发人员提供了图形化界面来管理和配置SQL Server实例。这个版本是中文64位版,用于进行数据库的创建、设计、查询、备份、恢复、性能监控和优化...
《SQL Server 2000高级开发指南》是一本针对微软数据库管理系统的深入教程,旨在帮助开发者和数据库管理员提升在SQL Server 2000环境中的技能和效率。该书全面覆盖了SQL Server 2000的核心特性,包括但不限于数据库...
ASP.NET和SQL Server是开发企业级Web应用的常用技术栈,它们在构建高效、安全且可扩展的系统中发挥着关键作用。在这个"ASP.NET+SQL Server 系统开发实例"中,我们可以深入理解这两项技术如何协同工作,构建出实际的...
《SQL Server 2005 数据库系统开发完全手册》是一部深入探讨SQL Server 2005数据库管理系统的重要参考资料,适合数据库开发人员、管理员以及对SQL Server 2005有兴趣的学习者。这本书包含了丰富的实践代码,旨在帮助...
通过对《SQLServer管理与开发技术大全》的学习,读者不仅能掌握SQL Server的基本操作,还能深入理解其背后的原理和技术,从而在实际工作中更好地应用和解决问题。这本书无疑是提升SQL Server技能的宝贵资源。