我正在尝试使用“for json path”语句在复杂且嵌套的 JSON 字符串中生成大量数据,并且我使用多个函数来创建此 JSON 字符串的不同部分,如下所示:
declare @queue nvarchar(max)
select @queue = (
select x.ID as layoutID
, l.Title as layoutName
, JSON_QUERY(queue_objects (@productID, x.ID)) as [objects]
from Layouts x
inner join LayoutLanguages l on l.LayoutID = x.ID
where x.ID = @layoutid
group by x.ID, l.Title
for json path
)
select @queue as JSON
Run Code Online (Sandbox Code Playgroud)
到目前为止,JSON 将是:
{
"root": [{
"layouts": [{
"layoutID": 5
, "layoutName": "foo"
, "objects": []
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
然后将调用“queue_objects”函数来填充“objects”数组:
select 0 as objectID
, …Run Code Online (Sandbox Code Playgroud) 所以,在我收到这个错误后,我一直在这里寻找答案,几乎每个人都有一个困难的方法来修复这个错误,但没有人解释为什么会出现这个错误,所以我不认为这个问题是完全重复。
我用 C 语言编写了一个 TCP 套接字,并使用“getaddrinfo”函数使套接字与主机名一起工作,效果非常好!你可以在github上找到我的代码。
但是当我尝试通过“getaddrinfo”创建UDP 套接字时,出现此错误:
ai_socktype 不支持 Servname
客户端.c
const char *host = argv[1];
const char *service = argv[2];
const char *string = argv[3];
struct addrinfo addrCriteria;
memset(&addrCriteria, 0, sizeof(addrCriteria));
addrCriteria.ai_family = AF_UNSPEC;
addrCriteria.ai_socktype = SOCK_DGRAM;
addrCriteria.ai_protocol = IPPROTO_UDP;
struct addrinfo *servAddr;
int ret = getaddrinfo(host, service, &addrCriteria, &servAddr);
if(ret != 0)
sysError(gai_strerror(ret));
Run Code Online (Sandbox Code Playgroud)
我意识到,当我给“service”提供像 8080 这样的数字输入时,不会返回任何错误,但是当我使用指向端口/8081 的字符串作为服务名称(例如“tproxy”)时,“gai_strerror”会返回提到的错误。
显然,gai_strerror 说:“‘SOCK_DGRAM’套接字类型不支持服务名称”,但为什么呢?我的意思是“getaddrinfo”不支持 UDP 套接字上的名称服务的确切原因?
有没有其他方法可以使用 UDP 套接字的服务名称而不是端口号?如何?
我一直在阅读尽可能多的同一问题的问题和答案,但我想我的问题需要更多创造性的方法。
所以我这里有一个 JSON 字符串:
declare @json nvarchar(max) =
'{
"propertyObjects": [{
"propertyID": 1
, "title": "foo"
, "class": ""
, "typeid": 150
, "value": "bar"
, "children": [{}]
}, {
"propertyID": 2
, "title": "foo"
, "class": ""
, "typeid": 128
, "value": "bar"
, "children": [{}]
}, {
"propertyID": 3
, "title": "foo"
, "class": ""
, "typeid": 128
, "value": "bar"
, "children": [{
"propertyID": 4
, "title": "foo"
, "class": ""
, "typeid": 128
, "value": "bar" …Run Code Online (Sandbox Code Playgroud) json ×2
sql ×2
c ×1
for-json ×1
getaddrinfo ×1
json-query ×1
recursion ×1
sockets ×1
sql-server ×1
udp ×1