【发布时间】:2017-12-09 21:56:03
【问题描述】:
我一直在查看我对 SQL Server 和半堆栈溢出的每一页的看法,但我找不到合适的解决方案
我们的挑战是处理从 SQL Server 发送/接收 JSON 的现有应用程序。所以我们必须在 SQL Server 上构建一个 STRONG JSON 架构。
我们需要验证 JSON 的格式(旧系统有自己的标准),因此消息的格式与预期的完全一致。
问题是,JSON 函数不如 XML 先进,而且似乎没有办法在 SQL Server 中验证架构。
我们尝试使用sp_prepare 和sp_execute,但这似乎不起作用。
我们测试了这样的东西:
Declare @ptSQL1 int;
Exec sp_prepare @ptSQL1 output,
N'@P1 nvarchar(128), @json NVARCHAR(1000) ',
N' SELECT *
INTO temp_tblPersons
FROM OPENJSON (@json, ''$.root'')
WITH (
Cname NVARCHAR(100) ''strict$.FirstName'',
Csurname NVARCHAR(100) ''lax$.surname''
) as J
where Csurname like @P1';
DECLARE @json7 NVARCHAR(1000)
SET @json7 = N'{
"root": [
{ "FirstName": "Charles" , "surname":"perez" },
{ "FirstName": "Jade" , "surname":"pelaz" },
{ "FirstName": "Jim" , "surname":"alvarez" },
{ "FirstName": "Luke" , "surname":"alonso" },
{ "FirstName": "Ken"}
]
}'
IF (@ptSQL1 = 0) PRINT 'THE SUPPLY JSON IS NOT VALID'
ELSE Exec sp_execute @ptSQL1, N'a%', @json7;
但不符合sp_prepare/execute 的行为。
我们打算在继续处理数据之前验证最小架构,如果架构不符合标准,则返回错误。
如何做到这一点?
(不确定我们在哪里读到 @ptSQL1 = 0,但我相信在某处读到)
【问题讨论】:
-
阅读这样的帖子:stackoverflow.com/questions/39652524/… 这似乎并不容易...... :-(
-
写一个C#代码来生效,而不是写一个存储过程。
-
这种验证最好不要在 DBMS 端进行。
-
@KunalMukherjee ,问题是数据库应该响应多个系统,因此在外部应用程序中这样做会增加架构的复杂性。
-
@gofr1 一样一样...
标签: json sql-server