2011-08-22 61 views
3

我在循环中测试查询性能。我不想返回结果集的重复数百个,我想运行一个select语句几百次,每次都丢弃结果。TSQL等效于PostgreSQL“PERFORM”关键字?

PostgreSQL的语法为“执行select ...”,它将执行select语句并放弃结果。 “37.6.2。执行没有结果的查询”http://www.postgresql.org/docs/8.2/static/plpgsql-statements.html

TSQL中是否存在等价关键字?

我知道SSMS有一个“放弃结果”选项,但是看起来结果在每次迭代后都不会丢弃,并且在所有迭代完成之前仍会在内存中累积。我猜想选择一个临时变量可能会起作用,但只要丢弃关键字的结果就简单多了。我宁愿避免构建表变量定义以及将结果存储在临时表中的潜在开销。

回答

0

我通过SQL-92规范搜索了一个等效的关键字,但是我找不到任何并且根据我的经验不知道SQL Server的特定关键字。

0

如果您使用的是ADO.Net,请使用command.ExecuteNonQuery()来执行没有结果集的查询。

using System; 
using System.Data; 
using System.Data.SqlClient; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     string sqlConnectString = "Data Source=(local);Integrated security=SSPI;Initial Catalog=MyDatabase;"; 

     string sqlDelete = "DELETE FROM MyTable WHERE Id = 2"; 

     SqlConnection connection = new SqlConnection(sqlConnectString); 
     SqlCommand command = new SqlCommand(sqlDelete, connection); 
     connection.Open(); 
     int rowsAffected = command.ExecuteNonQuery(); 
     Console.WriteLine("{0} row(s) affected.", rowsAffected); 
     Console.WriteLine("Record with Id = 2 deleted."); 
     connection.Close(); 
    } 
} 
+0

我使用TSQL而不是ADO.Net运行它。这个问题不是无视结果集的问题,据我所知,这是所有的ExecuteNonQuery完成的。问题是为了确保当每个SELECT语句完成时SQL Server会放弃结果集,当在单个TSQL批处理循环中发出数千个选择语句时,它可以有效地测试语句的性能,而不会浪费可能的资源干扰测试。 – Triynko