首页 > 解决方案 > 为什么在 SQL Server 中执行 HASHBYTES 需要`FOR XML XXX`?

问题描述

考虑以下查询:

SELECT HASHBYTES('MD5', (
    SELECT * FROM dbo.BATCH WHERE batch_key = 22866 FOR XML AUTO))

它工作正常。

但以下查询:

SELECT HASHBYTES('MD5', (
    SELECT * FROM dbo.BATCH WHERE batch_key = 22866 ))

返回以下错误:

Msg 116, Level 16, State 1, Line 2
当子查询没有用 EXISTS 引入时,只能在选择列表中指定一个表达式。

为什么FOR XML XXX需要执行哈希?

标签: sql-serverxmltsql

解决方案


它不是。但是,HASHBYTES需要一个标量值作为其输入;您有一个包含多行/多列的结果集,并且FOR XML是将此类结果集减少为单个标量值的许多不同方法之一。


推荐阅读