FOR JSON将JSON格式委托给SQL Server

时间:2016-11-13 03:52:34

标签: sql-server json

当数据库上下文设置为AdventureWorks2014时,以下语句从SQL Server 2016中的ODATA服务检索数据:

 SELECT 'http://services.odata.org/V4/Northwind/Northwind.svc/$metadata#Products(ProductID,ProductName)/$entity' 
AS '@odata.context', ProductID, Name as ProductName   
FROM Production.Product 
WHERE ProductID <400
FOR JSON AUTO  

当&#39;主人&#39;是上下文,它返回一个错误。 但是,Northwind不存在于SQL Server 2016中,而是存在于同一台Windows 10计算机上的SQL Server 2012实例上。

为什么在运行查询的数据库上下文是&#39; AdventureWorks 2014&#39;?

时它可以工作

以上查询来自此链接: https://msdn.microsoft.com/en-us/library/dn921897.aspx

1 个答案:

答案 0 :(得分:0)

如果 master 是当前数据库,此查询将尝试在master数据库中查找Production.Product表,它将失败,因为那里没有这种表。 您应该将查询的上下文切换到放置表的数据库,或者使用具有显式数据库名称的三个部分名称,例如:

SELECT 'http://services.odata.org/V4/Northwind/Northwind.svc/$metadata#Products(ProductID,ProductName)/$entity' 
AS '@odata.context', ProductID, Name as ProductName   
FROM AdventureWorks2014.Production.Product 
WHERE ProductID <400
FOR JSON AUTO