我想将一个JSON文档(由我的python客户端用json.dumps(payload, default=json_util.default))
创建)插入到我的数据库中。我在SQL Server(Azure)中有以下过程。
CREATE PROCEDURE InsertReading(@reading nvarchar(max))
AS BEGIN
insert into Readings(IdMongo, Value, Name, Date)
SELECT _id, value, name, date
FROM OPENJSON (@reading)
WITH (_id nvarchar(50),
value float,
date datetime,
name nvarchar(50))
END
当我使用这样的数据执行它时,它工作正常(不是我的文档 - 仅测试):
EXEC InsertReading '{
"value" : 21.625,
"name" : "myname",
"date" : "2016-03-30T07:38:27.102Z"
}'
但它失败了
EXEC InsertReading '{"date": {"$date": 1503074335547}, "value": 23.5, "name": "myname"}'
错误(日期转换失败并返回null):
Cannot insert the value NULL into column 'Date', table 'db.dbo.Readings'; column does not allow nulls. INSERT fails.
如何正确插入JSON?最好不要在客户端更改日期格式(我将它同时发送到mongo和sql)。
答案 0 :(得分:1)
SELECT _id, [value], [name],
COALESCE(
[date],
DATEADD(MILLISECOND, [dateMillis] % 1000,
DATEADD(SECOND, [dateMillis] / 1000, '19700101'))
)
FROM OPENJSON (@reading)
WITH (_id nvarchar(50),
[value] float,
[date] datetime,
[dateMillis] bigint '$.date."$date"',
[name] nvarchar(50))
这将允许您传递两种格式(日期/时间文字和毫秒偏移)。