我有一个存储过程,我想在此查询返回结果时打印一条消息。这段代码没有用。有任何想法吗?提前致谢。
DECLARE @xmltmp xml;
SET @xmltmp = (SELECT COUNT(*) AS C, Unit
FROM Cars
WHERE Unit is not null
GROUP BY Unit
HAVING COUNT(*)>1
)
PRINT CONVERT(NVARCHAR(MAX), @xmltmp)
我收到此错误:
Msg 116,Level 16,State 1,Line 8
当未使用EXISTS引入子查询时,只能在选择列表中指定一个表达式。Msg 206,Level 16,State 2,Line 2
操作数类型碰撞:int与xml不兼容
答案 0 :(得分:0)
您正在尝试将结果列表分配给XML变量 - 明确类型不匹配。但您可以使用FOR XML PATH
从结果集中创建XML:
提示:我将你的例子转移到一个生活在所有系统中的桌子上。
DECLARE @xmltmp xml;
SET @xmltmp = (SELECT COUNT(*) AS C
,type_desc
FROM sys.objects
WHERE object_id>100
GROUP BY type_desc
HAVING COUNT(*)>1
FOR XML RAW('object'),ROOT('root')
)
PRINT CONVERT(NVARCHAR(MAX), @xmltmp)
对于我的master
数据库,这会带回来:
<root><object C="3" type_desc="SQL_STORED_PROCEDURE"/><object C="3" type_desc="SERVICE_QUEUE"/><object C="7" type_desc="USER_TABLE"/><object C="8" type_desc="INTERNAL_TABLE"/></root>
我真的不知道,你想用PRINT
XML来实现什么,但这不是这个问题的一部分......