当数据库上下文设置为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
答案 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