真的希望有人能提供帮助。这可能不是什么新鲜事物,但找不到正确的答案。
我有一个非常简单的SQL查询,可以很好地工作;
SELECT
SecUser.Name, SecUser.Description,
SecUser.IsEnabled, SecUser.ExternalAuthProviderName,
SecUser.ExternalUserName, SecUser.Email, SecUser.XmlData
FROM
SecUser
ORDER BY
SecUser.Name
但是,最后一列是XmlData,它是4个字段的组合。
<UserDetail>
<TEXT1> "random text 1" </TEXT1>
<TEXT2> "random text 2" </TEXT2>
<TEXT3> "random text 3" </TEXT3>
<TEXT4> "random text 4" </TEXT4>
</UserDetail>
我需要帮助的是我该怎么办;
任何帮助将不胜感激,但请注意,我是新手:(
我现在正尝试在代码中添加WHERE子句,该子句效果很好;
但是,WHERE语句不断给出“无效的列名”错误?我尝试了许多不同的方法,但似乎无法使用WHERE进行过滤?
SELECT Name,
Description,
IsEnabled,
ExternalAuthProviderName,
ExternalUserName,
Email,
CAST(XmlData AS XML).value('UserDetail[1]/Text1[1]', 'varchar(255)') AS "SummaryGroup",
CAST(XmlData AS XML).value('UserDetail[1]/Text2[1]', 'varchar(255)') AS "SecurityGroup",
CAST(XmlData AS XML).value('UserDetail[1]/Text3[1]', 'varchar(255)') AS "Access",
CAST(XmlData AS XML).value('UserDetail[1]/Text4[1]', 'varchar(255)') AS "InsiderList"
FROM SecUser
WHERE (UserDetail/Text1 = 'Management')
ORDER BY Name
答案 0 :(得分:2)
假设XmlData
的类型为XML
,这将在MSSQL / T-SQL中起作用
SELECT Name,
Description,
IsEnabled,
ExternalAuthProviderName,
ExternalUserName,
Email,
XmlData.value('UserDetail[1]/TEXT1[1]', 'varchar(255)') AS TEXT1,
XmlData.value('UserDetail[1]/TEXT2[1]', 'varchar(255)') AS TEXT2,
XmlData.value('UserDetail[1]/TEXT3[1]', 'varchar(255)') AS TEXT3,
XmlData.value('UserDetail[1]/TEXT4[1]', 'varchar(255)') AS TEXT4
FROM SecUser
ORDER BY Name
如果XmlData
的类型为VARCHAR
,则需要将其强制转换为XML
SELECT Name,
Description,
IsEnabled,
ExternalAuthProviderName,
ExternalUserName,
Email,
CAST(XmlData AS XML).value('UserDetail[1]/TEXT1[1]', 'varchar(255)') AS TEXT1,
CAST(XmlData AS XML).value('UserDetail[1]/TEXT2[1]', 'varchar(255)') AS TEXT2,
CAST(XmlData AS XML).value('UserDetail[1]/TEXT3[1]', 'varchar(255)') AS TEXT3,
CAST(XmlData AS XML).value('UserDetail[1]/TEXT4[1]', 'varchar(255)') AS TEXT4
FROM SecUser
ORDER BY Name