Sql Server Management Studio (SSMS) アプリの中で「上位x行の選択」の場合は表示する際に小数点以下の桁数が制限されているのだろうと思います。
例えば、.NET アプリでは固定小数点書式指定子というのがあって、それで小数点以下の桁数を指定できます。
具体例下記:
using Microsoft.Data.SqlClient;
namespace ConsoleAppSqlClient
{
internal class Program
{
static void Main(string[] args)
{
var connString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=TestDatabase;Integrated Security=True";
var selectQuery = "SELECT id, Value FROM FloatTest";
using (var connection = new SqlConnection(connString))
{
using (var command = new SqlCommand(selectQuery, connection))
{
connection.Open();
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine($"{reader.GetDouble(1)}, {reader.GetDouble(1):F14}");
}
// 結果は
// 3.1500000953674316, 3.15000009536743
}
}
}
}
}
}
SSMS がどうしているか分かりませんが、たぶん似たような話だと思います。
【追記】
上の回答を理解されてないように見えますので、以下に補足を追記しておきます。
上の回答では省いてしまいましたが(ご存じだろうと思ったので)、以下のことは理解されてますか?
- SQL Server の float 型の仕様は Microsoft のドキュメント「float 型と real 型 (Transact-SQL)」のとおり。これが変わることはない。
- SSMS は SQL Server ではなく、SQL Server に接続して管理を行うための外部ツール (アプリ)。 SQL Server 本体の float の精度とは関係ない。
なので、今回の話、
「上位x行の選択」、もしくは「上記x行の編集」を指定した場合とで、得られるレコードが異なります。
は、外部アプリである SSMS が SQL Server からどのようにデータを取得して、どのように表示するかという話で (その一例を上の回答で示した)、SQL Server 本体とは何の関係もありません。