A partir do SQL Server 2008 R2 SP1, isso é bom e fácil, você pode consultar o DMV dm_server_services e procurar o serviço em cluster:
select cluster_nodename from [sys].[dm_server_services] where is_clustered = 'Y'
Versões anteriores do SQL Server, talvez você precise fazer algo como ler o registro, o que pode ser feito usando o seguinte código:
declare @dir nvarchar(20)
exec xp_regread
N'HKEY_LOCAL_MACHINE',
N'SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName',
N'ComputerName',
@dir OUTPUT
select @dir
Editar:
Para obter informações sobre em qual nó um grupo de recursos de cluster está sendo executado, é necessário usar o WMI, o seguinte código do PowerShell retornará o nó do cluster no qual o grupo especificado está atualmente ativo, como para fazer isso via T-SQL. , você poderia tanto fazer isso usando xp_cmdshell, ou criar uma tabela em seu banco de dados para armazenar esse valor, acrescentar um pouco de código ao PowerShell para fazer com que ele atualize o valor na tabela toda vez que ele for executado e executá-lo como um trabalho do agente SQL do powershell:
$group = "Available Storage"
$computer = "."
$hostName = Get-WmiObject -Authentication PacketPrivacy -Impersonation Impersonate -Namespace root\MSCluster -ComputerName $computer -Class MSCluster_NodeToActiveGroup | Where-Object {$_.PartComponent -like "*$group*"} | Select-Object -ExpandProperty GroupComponent | Out-String
$hostName = $hostName.TrimStart("MSCluster_Node.Name=")
$hostName = $hostName.TrimStart()
$hostName = $hostName.TrimEnd()
Write-Host $hostName.Substring(1,$hostname.Length-2)
Também seria bastante trivial regravar isso em C # e criar uma função CLR do servidor SQL que aceite os parâmetros de um computador para executar a consulta e o grupo para verificar e, em seguida, retornar o nome do servidor.
Espero que isso ajude, pelo menos, a colocar você no caminho.