我正在尝试列出数据库中所有小数位数最大的浮点型列。我的最终目标是使用正确的标度和精度将这些浮点型列转换为十进制。
我可以使用以下内容列出所有浮动列
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
如何动态获取第二个查询中所有列的结果并将其与第一个查询一起加入?
谢谢
答案 0 :(得分:0)
您尝试做的事情根本无法解决。
Float
不应该存储 precise 值,为此,存在decimal
/ numeric
类型。 Float
非常适合存储无法容纳任何“精确”类型的兆值。
我举一个例子。您可以轻松地使这些值适合浮点数:
create table dbo.fl(col float);
insert into dbo.fl
values(2e100), (2e-100);
您可以发明的任何解决方案都将因这些值而失败。
float
的概念是:它可以存储无法以其他类型存储的巨大值。