Подзапрос возвратил более 1 значения, используя приведение XML - PullRequest
0 голосов
/ 08 июня 2018

Подзапрос вернул более 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

Как я могу заставить это работать с болеечем одно значение?

1 Ответ

0 голосов
/ 08 июня 2018

Я думаю for xml path делает то, что вы хотите:

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