WEB开发网
开发学院数据库MSSQL Server 提高SQL Server性能的五种方法 阅读

提高SQL Server性能的五种方法

 2008-09-02 09:59:02 来源:WEB开发网   
核心提示: 此代码告诉SQL Server不要返回查询的行计数,然后执行insert语句,提高SQL Server性能的五种方法(2),并返回刚刚为这个新行创建的IDENTITY值,SET NOcount ON语句表示返回的记录集有一行和一列,这可以使用返回定单ID的SQL查询来检索,此数据就会存储在

此代码告诉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表进行联接,以返回这些定单售出的产品数量:

上一页  1 2 3 4 5 6 7  下一页

Tags:提高 SQL Server

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接