Как использовать SQL Сервер для выбора в другую таблицу? - PullRequest
1 голос
/ 30 марта 2020

Я консолидирую веб-сервис. Я заменяю несколько вызовов на сервис одним вызовом, который содержит данные.

Я создал таблицу:

CREATE TABLE InvResults 
(
    Invoices nvarchar(max),
    InvoiceDetails nvarchar(max),
    Products nvarchar(max)
);

Я использовал (max), потому что я не знаю, насколько сложной будет json в это время.

Мне нужно сделать что-то вроде выбора (это псевдокод, а не фактический SQL):

SELECT 
    (SELECT * 
     INTO InvResults for Column Invoices
     FROM MyInvoiceTable
     WHERE SomeColumns = 'someStuffvariable'
     FOR JSON PATH, ROOT('invoices')) AS invoices;

SELECT 
    (SELECT * 
     INTO InvResults for Column InvoiceDetails
     FROM MyInvoiceDetailsTable
     WHERE SomeColumns = 'someStuffvariable'
     FOR JSON PATH, ROOT('invoicedetails')) AS invoicedetails;

Я не знаю, как это отформатировать, и мои навыки работы с Google меня подводят на данный момент , Я понимаю, что, вероятно, хочу использовать инструкцию UPDATE, но я не уверен, как это сделать в сочетании с остальными моими требованиями. Я изучаю Как мне выполнить ОБНОВЛЕНИЕ с SELECT на SQL Сервере? , но я все еще остановился.

Конечным результатом должна быть таблица "InvResults", которая имеет 3 столбцы, содержащие одну строку с результатами операторов Select как JSON. Имена столбцов должны быть определены так же, как объекты json root.

1 Ответ

2 голосов
/ 30 марта 2020
INSERT INTO InvResults(Invoices,InvoidesDetails)
SELECT 
    (SELECT * 
     INTO InvResults for Column Invoices
     FROM MyInvoiceTable
     WHERE SomeColumns = 'someStuffvariable'
     FOR JSON PATH, ROOT('invoices')) 
,
    (SELECT * 
     INTO InvResults for Column InvoiceDetails
     FROM MyInvoiceDetailsTable
     WHERE SomeColumns = 'someStuffvariable'
     FOR JSON PATH, ROOT('invoicedetails')) 
;

Поскольку SELECT.. FOR JSON возвращает только 1 строку выше, работает.

Третье поле легко добавить, но осталось сделать для себя ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...