在我的.Net应用程序中,如果执行以下命令,则值不匹配:
SELECT
SESSIONPROPERTY('ARITHABORT'),
CASE WHEN (@@OPTIONS & 64) = 64 THEN 1 ELSE 0 END
我的印象是SESSIONPROPERTY
和@@OPTIONS
将产生相同的结果。就我而言,SESSIONPROPERTY
返回0,@@OPTIONS
返回1。
哪个更准确?为什么?
答案 0 :(得分:1)
我同意Jeroen ...不是特定于.Net的。 @@OPTIONS
反映了连接中的内容,而SESSIONPROPERTY
没有反映。打开跟踪以查看连接上正在发生的情况,然后您将看到.Net默认连接的作用:
在运行命令之前,我已经完成了相同的设置:
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 ] );
}
}
}
}
一个人想知道这是一个错误...还是仅仅是一个文档。