2

以下动态查询以科学计数法返回数字列的输出。

DECLARE @Cols VARCHAR(MAX) = (SELECT STUFF((
SELECT ',' +'['+ Description + ']' FROM @PermittedColumnIDs

DECLARE @Query NVARCHAR(MAX) = 'SELECT TOP 1000 '+ @Cols +' FROM ' + (SELECT ViewName FROM
@DynamicQueryProps) + ' FOR JSON AUTO';
EXECUTE sp_executesql @Query

JSON 输出

JSON

表格输出

桌子

如上所述,表格视图AWP正确返回值,而 JSON 视图以科学计数法返回值。如何在AWP没有 Sc 的情况下获取 JSON 列。符号。

请注意

  • 它需要将数值保留为数字,而不将其转换为 JSON 结果中的字符串。
  • 由于列是动态的,因此无法更改单个列的格式。
4

1 回答 1

2

评论太长了,所以我将其发布为答案。我只能在有关如何将 SQL Server 数据类型转换为 JSON 类型的文档中找到这些解释。FOR JSON因此,作为一种可能的解决方法,您可以尝试将float列转换为numeric使用系统目录视图中的信息(我假设这SELECT是针对视图的)。

DECLARE @cols varchar(MAX) = STUFF(
    (
    SELECT 
        ', ' +
        CASE 
           WHEN t.[name] = 'float' THEN 'CONVERT(numeric(10, 2), [' + p.[description] + ']) AS [' + p.[description] + N'] '
           ELSE p.[description] 
        END
    FROM sys.columns c
    JOIN sys.views v ON c.object_id = v.object_id
    JOIN sys.schemas s ON v.schema_id = s.schema_id
    JOIN sys.types t ON c.system_type_id = t.system_type_id
    JOIN @PermittedColumnIDs p ON p.[description] = c.[name]
    WHERE v.[name] = (SELECT ViewName FROM @DynamicQueryProps) AND s.[name] = 'dbo'
    FOR XML PATH(''), TYPE
    ).value('.', 'varchar(max)'), 1, 1, ''
)

DECLARE @query nvarchar(max) 
SET @query = 
   N' SELECT TOP 1000 '+ @Cols +
   N' FROM [' + (SELECT ViewName FROM @DynamicQueryProps) + ']' +
   N' FOR JSON AUTO';

EXECUTE sp_executesql @query
于 2020-05-05T13:10:39.543 回答