我需要从SQL Server标量函数返回的JSON。
我在SSMS中编写了此查询
SELECT
Id AS [Expense.Id],
Amount AS [Expense.Amount],
StudentName AS [Expense.StudentName]
FROM
[dbo].[Expenses]
FOR JSON PATH, Root('Expenses')
这是结果(完全是我想要的)
"Expenses": [
{
"Expense": {
"Id": "43838475-5BBC-4C2A-A1E9-85F9E55298D3",
"Amount": 0.0000000e+000,
"StudentName": "Carter"
}
},
{
"Expense": {
"Id": "38AC0403-5DCF-42E1-A103-5D33DB905F57",
"Amount": 0.0000000e+000,
"StudentName": "Louis"
}
},
{
"Expense": {
"Id": "5E6EB81E-C988-4D7C-98AB-FA814CFF875A",
"Amount": 0.0000000e+000,
"StudentName": "David"
}
}
现在,我要做的就是将其包装在一个函数中:
CREATE FUNCTION [dbo].[get_all_json]
(@input nvarchar)
RETURNS nvarchar
AS
BEGIN
DECLARE @return nvarchar
SET @return = (SELECT
Id AS [Expense.Id],
Amount AS [Expense.Amount],
StudentName AS [Expense.StudentName]
FROM
[dbo].[Expenses]
FOR JSON PATH, Root('Expenses'))
RETURN @return
END
现在我在SSMS中称它为
SELECT TRIM( dbo.get_all_json('1')) json_fm_func;
然后我得到这个结果:
SELECT TRIM( dbo.get_all_json('1')) json_fm_func;
出了什么问题?
答案 0 :(得分:1)
您需要将nvarchar
更改为nvarchar(max)
create function [dbo].[get_all_json] (@input nvarchar(max))
--the argument (@input) is never used. you can create your function without argument.
returns nvarchar(max) as
begin
declare @return nvarchar(max)
set @return = (SELECT Id as [Expense.Id]
,Amount As [Expense.Amount]
,StudentName As [Expense.StudentName]
FROM [dbo].[Expenses] FOR JSON PATH, Root('Expenses'))
return @return
end