【问题标题】:TSQL equivalent of PostgreSQL "PERFORM" keyword?TSQL 相当于 PostgreSQL“PERFORM”关键字?
【发布时间】:2011-11-01 08:35:48
【问题描述】:

我正在循环测试查询性能。我不想返回一百个重复的结果集,而是想运行数百次 select 语句,每次都丢弃结果。

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

TSQL 中有没有等价的关键字?

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

【问题讨论】:

    标签: c# tsql postgresql performance-testing multiple-resultsets


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果您使用的是 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( );
          }
      }
      

      【讨论】:

      • 我在 TSQL 中运行它,而不是在 ADO.Net 中。问题不在于忽略结果集,据我所知,这是所有 ExecuteNonQuery 完成的。问题是确保 SQL Server 在每个 SELECT 语句完成后立即丢弃结果集,当在单个 TSQL 批处理中循环发出数千个 select 语句时,它可以有效地测试语句的性能而不会浪费资源,这可能干扰测试。
      猜你喜欢
      • 1970-01-01
      • 2011-01-09
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多