SQLServer打印为存储过程中表的消息选择计数(*)

时间:2018-01-23 13:48:09

标签: sql-server xml

我有一个存储过程,我想在此查询返回结果时打印一条消息。这段代码没有用。有任何想法吗?提前致谢。

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不兼容

1 个答案:

答案 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来实现什么,但这不是这个问题的一部分......