T-SQL 在查询中使用不支持的列

T-SQL Using Unsupported Column In Query

我正在尝试使用以下查询从 SQL Server 2008 R2 及更高版本查询集群节点信息。

select
nodename node,
status status_value,
status_description status_text,
case when is_current_owner = 1 then 'true' else 'false' end is_current_owner
from sys.dm_os_cluster_nodes

这在 SQL Serve 2012 及更高版本上工作正常,但根据 sys.dm_os_cluster_nodes page 在 2008 R2 上它看起来状态和 status_description 不可用.

是否可以运行 2008 R2 上的查询并为不受支持的列填写值?我尝试使用 case 语句来检测 SQL 服务器版本并在 2012 列中打印默认值。似乎如果状态或状态描述列出现在查询中的任何位置,则查询将因列无效而失败。

您可以询问服务器它是什么版本,然后根据响应做一些不同的事情。

DECLARE @sql NVARCHAR(MAX) = ''

IF (SELECT left(cast(SERVERPROPERTY('productversion') as char(10)),2) )='12'
BEGIN

SELECT @sql = @sql +

'
select
nodename node,
status status_value,
status_description status_text,
case when is_current_owner = 1 then ''true'' else ''false'' end is_current_owner
from sys.dm_os_cluster_nodes'
END

ELSE
BEGIN
SELECT @sql= @sql +
'
select
nodename node,
'''' as status_value,
'''' as status_text,

case when is_current_owner = 1 then ''true'' else ''false'' end as is_current_owner
from sys.dm_os_cluster_nodes

'
END

select @sql 
exec sp_executesql @sql