如何列出具有最大小数位的数据库中的所有浮点列?

时间:2019-01-09 18:33:04

标签: sql-server sql-server-2008

我正在尝试列出数据库中所有小数位数最大的浮点型列。我的最终目标是使用正确的标度和精度将这些浮点型列转换为十进制。

我可以使用以下内容列出所有浮动列

SELECT A.table_name, 
       column_name, 
       data_type 
FROM   DB1.information_schema.columns A 
       INNER JOIN DB1.information_schema.tables B 
               ON A.table_name = B.table_name 
WHERE  table_type = 'BASE TABLE' 
       AND data_type = 'Float' 
ORDER  BY A.table_name 

并查看如下所示的单个float列的最大小数位

SELECT MAX
       (CASE Charindex('.', COLUMN1)
                    WHEN 0 THEN 0
                    ELSE
   Len (Cast(Cast(Reverse(CONVERT(VARCHAR(50), COLUMN1, 128)
                     ) AS FLOAT) AS BIGINT))
                  END) AS MAX_LENGTH
FROM   DB1.dbo.TABLE1

我试图将两者的结果结合起来,所以我得到了下面的结果。

table_name, 
column_name, 
data_type,
MAX_LENGTH

如何动态获取第二个查询中所有列的结果并将其与第一个查询一起加入?

谢谢

1 个答案:

答案 0 :(得分:0)

您尝试做的事情根本无法解决。 Float不应该存储 precise 值,为此,存在decimal / numeric类型。 Float非常适合存储无法容纳任何“精确”类型的兆值。

我举一个例子。您可以轻松地使这些值适合浮点数:

create table dbo.fl(col float);

insert into dbo.fl
values(2e100), (2e-100);

您可以发明的任何解决方案都将因这些值而失败。 float的概念是:它可以存储无法以其他类型存储的巨大值。