【发布时间】: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 TVF 或VIEW。