【问题标题】:Subquery returned more than 1 value using XML cast使用 XML 强制转换的子查询返回超过 1 个值
【发布时间】:2018-06-08 14:20:10
【问题描述】:

子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

CREATE PROCEDURE list_select (@id INT)

AS

IF (@id IS NOT NULL)
BEGIN
    DECLARE @xml XML = CAST((SELECT data FROM messages WHERE id = @id) AS XML)
    DECLARE @reference VARCHAR(MAX) =  @xml.value('(/*:xml/*:reference/text())[1]', 'varchar(50)')
    DECLARE @name VARCHAR(MAX) = @xml.value('(/*:xml/*:name/text())[1]', 'varchar(50)')

END

SELECT
    @reference as reference,
    @name as name
GO

我怎样才能让它使用多个值?

【问题讨论】:

  • 在您的表messages 中似乎有一列data。此列的数据类型是什么,内容是什么样的? id 列在此表中是否唯一?可能您正试图从messages 中获取多行的XML...非常不清楚...我很确定,这可以做得更好。可能使用 inline TVFVIEW

标签: sql xml select declare


【解决方案1】:

认为 for xml path 做你想做的事:

DECLARE @xml XML = (SELECT data FROM messages WHERE id = @id FOR XML PATH (''))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 2016-04-10
    • 1970-01-01
    相关资源
    最近更新 更多