提高SQL Server性能的五种方法
2008-09-02 09:59:02 来源:WEB开发网此代码告诉SQL Server不要返回查询的行计数,然后执行insert语句,并返回刚刚为这个新行创建的IDENTITY值。SET NOcount ON语句表示返回的记录集有一行和一列,其中包含了这个新的 IDENTITY 值。如果没有此语句,则会首先返回一个空的记录集(因为 insert语句不返回任何数据),然后会返回第二个记录集,第二个记录集中包含 IDENTITY 值。这可能有些令人困惑,尤其是因为您从来就没有希望过 insert 会返回记录集。之所以会发生此情况,是因为 SQL Server 看到了这个行计数(即一行受到影响)并将其解释为表示一个记录集。因此,真正的数据被推回到了第二个记录集。当然您可以使用 ADO 中的 NextRecordset 方法获取此第二个记录集,但如果总能够首先返回该记录集且只返回该记录集,则会更方便,也更有效率。
此方法虽然有效,但需要在SQL语句中额外添加一些代码。获得相同结果的另一方法是在insert之前使用SET NOcount ON语句,并将select @@IDENTITY语句放在表中的 FOR insert触发器中,如下面的代码片段所示。这样,任何进入该表的 insert 语句都将自动返回 IDENTITY 值。
create TRIGGER trProducts_insert ON Products FOR insert AS
select @@IDENTITY
GO
触发器只在Products表上发生insert时启动,所以它总是会在成功insert之后返回一个IDENTITY。使用此技术,您可以始终以相同的方式在应用程序中检索IDENTITY值。
二、内嵌视图与临时表
某些时候,查询需要将数据与其他一些可能只能通过执行GROUP BY然后执行标准查询才能收集的数据进行联接。例如,如果要查询最新五个定单的有关信息,您首先需要知道是哪些定单。这可以使用返回定单ID的SQL查询来检索。此数据就会存储在临时表(这是一个常用技术)中,然后与Products表进行联接,以返回这些定单售出的产品数量:
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接