Sql server 为什么在SQL Server中执行HASHBYTES时需要“FOR XML XXX”?

Sql server 为什么在SQL Server中执行HASHBYTES时需要“FOR XML XXX”?,sql-server,xml,tsql,Sql Server,Xml,Tsql,考虑以下查询: 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 )) 它很好用 但以下问题: SELECT HASHBYTES('MD5', ( SELECT * FROM dbo.BATCH

考虑以下查询:

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 ))
它很好用

但以下问题:

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 ))
返回以下错误:

味精116,第16级,状态1,第2行
当子查询未引入EXISTS时,只能在选择列表中指定一个表达式


为什么执行哈希需要XML XXX的
。但是,
HASHBYTES
需要一个标量值作为其输入;您有一个包含多行/列的结果集,
FOR XML
是将此类结果集缩减为单个标量值的许多不同方法之一