.net - 在 SQL Server 中,SESSIONPROPERTY 和 @@Options 之间有什么区别?

标签 .net sql-server

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

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

我的印象是 SESSIONPROPERTY@@OPTIONS 会产生相同的结果。在我的例子中,SESSIONPROPERTY 返回 0 而 @@OPTIONS 返回 1。

哪个更准确,为什么?

最佳答案

我同意 Jeroen 的观点...它不是特定于 .Net 的。 @@OPTIONS 反射(reflect)了连接中的内容,而 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 ] );
      }
    }
  }
}

有人想知道这是一个错误......还是只是 squirrely doc。

关于.net - 在 SQL Server 中,SESSIONPROPERTY 和 @@Options 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54560319/

相关文章:

c# - 带有 FileInfo 的 ASP.NET Core 序列化对象返回不完整的 JSON

.net - 将 VC++ 静态库包装在 DLL 中以与 .Net 托管程序集一起使用

c# - 使用 visual studio 和 entity framework core 5.0.2 连接到 MSSQL Server developer edition

c# - 我们可以取消发给 sql server 的查询吗?

sql-server - SQL合并中的打印语句

sql - Float 在数据库 Sql Server 中存储为 Real

c# - 我如何知道分配给线程的实际时间片?

c# - Wix - 如何在安装后从安装目录运行 exe 文件?

c# - .NET Framework 如何分配线程 ID?

sql-server - Objective-C:数据库支持