在SQL Server中,SESSIONPROPERTY和@@ Options有什么区别?

时间:2019-02-06 18:32:34

标签: .net sql-server

在我的.Net应用程序中,如果执行以下命令,则值不匹配:

SELECT 
    SESSIONPROPERTY('ARITHABORT'), 
    CASE WHEN (@@OPTIONS & 64) = 64 THEN 1 ELSE 0 END

我的印象是SESSIONPROPERTY@@OPTIONS将产生相同的结果。就我而言,SESSIONPROPERTY返回0,@@OPTIONS返回1。

哪个更准确?为什么?

1 个答案:

答案 0 :(得分:1)

我同意Jeroen ...不是特定于.Net的。 @@OPTIONS反映了连接中的内容,而SESSIONPROPERTY没有反映。打开跟踪以查看连接上正在发生的情况,然后您将看到.Net默认连接的作用:

enter image description here

在运行命令之前,我已经完成了相同的设置:

alter database [thedatabase] set arithabort on with no_wait

...而我的测试工具是:

using ( var conn = new SqlConnection( "Data Source=.;Initial Catalog=thedatabase;Integrated Security=True" ) )
{
  conn.Open( );
  using ( var cmd = conn.CreateCommand( ) )
  {
    cmd.CommandText = "SELECT SESSIONPROPERTY( 'ARITHABORT' ), CASE WHEN(@@OPTIONS &64) = 64 THEN 1 ELSE 0 END";
    cmd.CommandType = System.Data.CommandType.Text;
    using ( var reader = cmd.ExecuteReader( ) )
    {
      while ( reader.Read( ) )
      {
        Console.WriteLine( "{0},{1}", reader[ 0 ], reader[ 1 ] );
      }
    }
  }
}

一个人想知道这是一个错误...还是仅仅是一个文档。