Sql转换为xml然后在强制转换时运行.value

时间:2009-07-29 09:15:47

标签: sql

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER VIEW [dbo].[viewProductExportUpdated2]
AS
SELECT     dbo.ProductCategories.ProductCategoryID AS ProductCode, dbo.ProductCategories.ProductCategoryName AS ProductTitle, 
                      dbo.Products.ShortDescription AS ProductShortDesc, dbo.Products.LongDescription AS ProductLongDesc,
                      CAST(dbo.Products.ProductXML AS XML) AS ProdXml, ProdXml.value('data(Products/PackSize)[1]', 'nvarchar(max)') AS ProductPackSize   
FROM         dbo.ProductCategories INNER JOIN
                      dbo.Products ON dbo.ProductCategories.ProductCategoryID = dbo.Products.ProductCategoryID
WHERE     (dbo.ProductCategories.Deleted = 0)
GO

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO

我正在尝试将一个ntext列(ProductXML)转换为xml,然后对该案例运行选择。

但是我收到以下错误: 消息4121,级别16,状态1,过程viewProductExportUpdated2,第4行 找不到列“ProdXml”或用户定义的函数或聚合“ProdXml.value”,或者名称不明确。

该网站是旧网站,我们没有时间将coloumn更改为xml等。

感谢

麦克

2 个答案:

答案 0 :(得分:1)

查询中唯一不使用列别名的部分是抛出错误的部分,即:

 ProdXml.value('data(Products/PackSize)[1]', 'nvarchar(max)') AS ProductPackSize

将它更改为dbo.ProdXml会修复错误还是生成另一个错误?

答案 1 :(得分:0)

这不是对xml的CAST。它将是:

CAST(ProdXml /* but the question text says ProductXML */, nvarchar(max))

现在,粉碎XML需要更多信息,例如样本和所需的输出。 也许是另一个问题,还是更新这个?

Example XML shred 1