评论太长了,所以我将其发布为答案。我只能在有关如何将 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