2017-04-24 76 views
1

我试图运行以下查询,从示例数据库中的客户记录生成JSON字符串。SQL FOR JSON转换问题

SELECT 
    CustomerID, 
    CustomerName, 
    PersonID AS [CustomerContact.PersonID], 
    SUBSTRING(FullName, 0, CHARINDEX(' ', FullName)) AS [CustomerContact.FirstName], 
    SUBSTRING(FullName, CHARINDEX(' ', FullName) + 1, LEN(FullName)) AS [CustomerContact.LastName], 
    EmailAddress AS [CustomerContact.Email], 
    DeliveryAddressLine1 AS [CustomerContact.Address1], 
    DeliveryAddressLine2 AS [CustomerContact.Address2], 
    CityName AS [CustomerContact.City], 
    StateProvinceName AS [CustomerContact.State], 
    DeliveryPostalCode AS [CustomerContact.Zip], 
    CustomerCategoryName AS CustomerType, 
    WebsiteURL As Website 
FROM 
    Sales.Customers 
    LEFT JOIN Sales.CustomerCategories 
    ON Customers.CustomerCategoryID = CustomerCategories.CustomerCategoryID 
    LEFT JOIN Application.Cities 
    ON Customers.DeliveryCityID = Cities.CityID 
    LEFT JOIN Application.StateProvinces 
    ON Cities.StateProvinceID = StateProvinces.StateProvinceCode 
    LEFT JOIN Application.People 
    ON Customers.CustomerID = People.PersonID 
WHERE 
    Customers.CustomerID = 200 
FOR JSON PATH 

当我尝试这一点,它只是引发以下错误:

Conversion failed when converting the ****** value '******' to data type ******. 

有谁知道这是什么意思?

编辑:***的字面上显示为星号,而不是隐藏的值。该生产线的错误是Msg 245, Level 16, State 1, Line 1

+0

在这种情况下,这可能意味着您试图将两列用不同的类型等同。你能分享一下*****的内容吗?如果它给你一个行号? – Simon

+0

首先想到的是这一行:ON Cities.StateProvinceID = StateProvinces.StateProvinceCode - 你的意思是加入ID与代码? – Simon

+0

这实际上解决了它,它生成了JSON字符串,但它是...时髦。不是我所期望的。 – user3066571

回答

1

是弹簧想到的第一件事是这一行:

ON Cities.StateProvinceID = StateProvinces.StateProvinceCode 

您的意思是加入ID与代码?