Sql 子查询使用XML强制转换返回了多个值

Sql 子查询使用XML强制转换返回了多个值,sql,xml,select,declare,Sql,Xml,Select,Declare,子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时 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/*:refer

子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时

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
我如何让它与多个值一起工作?

我认为
for xml path
可以满足您的需要:

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

在您的表
messages
中似乎有一列
data
。此列的数据类型是什么,内容是什么样的?此表中的
id
列是否唯一?可能是您正试图从
消息中获取几行XML。。。非常不清楚。。。我很肯定,这可以做得更好。可能使用内嵌TVF或
视图