Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Vonatkozik a következőkre: SQL Server 2016 (13.x) és későbbi verziók
, Azure SQL Database,
AzureSQL Managed Instance
,Azure Synapse Analytics (serverless SQL pool only)
SQL database in Microsoft Fabric
Az alábbi példák bemutatják a FOR JSON záradék és JSON-kimenetének használatát az SQL Serveren vagy az ügyfélalkalmazásokban. További információ: Lekérdezési eredmények formázása JSON-ként a FOR JSON használatával.
A Fabric Data Warehouse-ban FOR JSON kell lennie a lekérdezés utolsó operátorának, és így nem engedélyezett az al lekérdezésekben, mint a cikkben szereplő példákban.
A FOR JSON-kimenet használata az SQL Database Engine változóiban
A FOR JSON záradék kimenete nvarchar(max)típusú, így bármely változóhoz hozzárendelheti, ahogyan az alábbi példában látható.
DECLARE @x NVARCHAR(MAX) =
(SELECT TOP 10 *
FROM Sales.SalesOrderHeader
FOR JSON AUTO)
JSON-kimenet használata az SQL Database Engine felhasználó által definiált függvényeiben
Létrehozhat felhasználó által definiált függvényeket, amelyek az eredményhalmazokat JSON-ként formázzák, és visszaadják ezt a JSON-kimenetet. Az alábbi példa egy felhasználó által definiált függvényt hoz létre, amely lekéri az értékesítési rendelés részletes sorait, és JSON-tömbként formázza őket.
CREATE FUNCTION GetSalesOrderDetails(@salesOrderId int)
RETURNS NVARCHAR(MAX)
AS
BEGIN
RETURN (SELECT UnitPrice, OrderQty
FROM Sales.SalesOrderDetail
WHERE SalesOrderID = @salesOrderId
FOR JSON AUTO)
END
Ezt a függvényt kötegben vagy lekérdezésben is használhatja az alábbi példában látható módon.
DECLARE @x NVARCHAR(MAX) = dbo.GetSalesOrderDetails(43659)
PRINT dbo.GetSalesOrderDetails(43659)
SELECT TOP 10
H.*, dbo.GetSalesOrderDetails(H.SalesOrderId) AS Details
FROM Sales.SalesOrderHeader H
Szülő- és gyermekadatok egyesítése egyetlen táblába
Az alábbi példában minden gyermeksor JSON-tömbként van formázva. A JSON-tömb a szülőtábla Részletek oszlopának értéke lesz.
SELECT TOP 10 SalesOrderId, OrderDate,
(SELECT TOP 3 UnitPrice, OrderQty
FROM Sales.SalesOrderDetail D
WHERE H.SalesOrderId = D.SalesOrderID
FOR JSON AUTO) AS Details
INTO SalesOrder
FROM Sales.SalesOrderHeader H
Az adatok frissítése JSON-oszlopokban
Az alábbi példa bemutatja, hogy frissítheti egy JSON-szöveget tartalmazó oszlop értékét.
UPDATE SalesOrder
SET Details =
(SELECT TOP 1 UnitPrice, OrderQty
FROM Sales.SalesOrderDetail D
WHERE D.SalesOrderId = SalesOrder.SalesOrderId
FOR JSON AUTO)
A FOR JSON-kimenet használata C#-ügyfélalkalmazásban
Az alábbi példa bemutatja, hogyan kérhető le egy lekérdezés JSON-kimenete egy StringBuilder-objektumba egy C#-ügyfélalkalmazásban. Tegyük fel, hogy a queryWithForJson változó egy SELECT utasítás szövegét tartalmazza egy FOR JSON záradékkal.
var queryWithForJson = "SELECT ... FOR JSON";
using(var conn = new SqlConnection("<connection string>"))
{
using(var cmd = new SqlCommand(queryWithForJson, conn))
{
conn.Open();
var jsonResult = new StringBuilder();
var reader = cmd.ExecuteReader();
if (!reader.HasRows)
{
jsonResult.Append("[]");
}
else
{
while (reader.Read())
{
jsonResult.Append(reader.GetValue(0).ToString());
}
}
}
}
További információ a JSON-ról az SQL Database Engine-ben
A beépített JSON-támogatás vizuális bemutatásához tekintse meg az alábbi videókat: