sql - 使用 XML 强制转换的子查询返回超过 1 个值
问题描述
子查询返回超过 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
我怎样才能让它与多个值一起工作?
解决方案
我认为 for xml path
做你想要的:
DECLARE @xml XML = (SELECT data FROM messages WHERE id = @id FOR XML PATH (''))
推荐阅读
- arrays - 来自表单复选框的 Coldfusion 数组
- python - 如何通过将 Label 小部件转换为 Canvas 小部件在 TKinter 中使背景透明?
- php - PHP 的 echo/print_r 函数能否以某种方式打印 NULL 和 false 之类的单词?
- matlab - 低通滤波器设计matlab
- javascript - 如何抓取没有 href 且在页面源中不可用的链接
- node.js - React-Hooks PUT 在单击时从对象请求特定字段
- javascript - 如何缩短vue-apex图表中x轴标签之间的空间
- python - 如何从预配置的日志记录对象中获取配置字典
- python - 我在 else 中不断收到语法错误 - 如果用户输入错误,则需要帮助 Python 创建矢量计算器
- mysql - 当我尝试加入 NULLS 时,MySQL 查询返回一个非常错误的结果