填充函数导致消息 8120,级别 16



我有一个生产数据库DataProdIPSubnets表。此表仅由两列组成:ID(此处未使用(和子网地址(IP_Subnets0(。

现在,我想将每个IP_Subnets0条目与其所在的物理站点的名称相关联。由于单个站点可以有多个子网,因此我还希望使用关联子网的串联列表按站点对结果进行分组。

到目前为止,我所做的如下:

  • 我已从声明站点列表表开始,因为我无法在数据库中创建新的永久表。您可以注意到Site3有两个关联的子网。
  • 然后,我从@SiteList中选择SiteName并使用StuffGroup_ConcatIP_Subnets0一样行事。
  • 最后,我做了一个Group By SiteName.

法典:

DECLARE @SiteList TABLE (SiteID Int Not Null Primary Key Identity(1,1), 
SiteName VarChar(30), 
Subnet VarChar(15)
)
INSERT INTO @SiteList 
VALUES ('Site1', '192.168.10.0'), ('Site2', '192.168.20.0'),
('Site3', '192.168.30.0'), ('Site3', '192.168.40.0')
SELECT DISTINCT
SL.SiteName, 
Subnets = STUFF((SELECT DISTINCT ','+ IP_Subnets0 
FROM dbo.v_RA_System_IPSubnets
WHERE IP_Subnets0 = SL.Subnet
FOR XML PATH('')), 1, 1, '')
FROM
@SiteList SL
GROUP BY
SL.SiteName

当我这样做时,我收到一个错误

Msg 8120,级别 16 "@SiteList.Subnet"在选择列表中无效,因为它未包含在聚合函数或 GROUP BY 子句中

STUFF内的WHERE子句的行上。

我不明白问题是什么。我已经类似地使用了这篇Stuff作品(尽管不像我在这里那样使用声明的表,而是使用数据库中的实际表(,并且一切顺利。

知道吗?

您在这里没有聚合任何数据 - 按现有方式运行查询,没有最后一行 - 即删除GROUP BY语句。

更新的查询

DECLARE @SiteList TABLE (SiteID Int Not Null Primary Key Identity(1,1), 
SiteName VarChar(30), 
Subnet VarChar(15)
)
INSERT INTO @SiteList 
VALUES ('Site1', '192.168.10.0'), ('Site2', '192.168.20.0'),
('Site3', '192.168.30.0'), ('Site3', '192.168.40.0')
SELECT DISTINCT
SL.SiteName, 
Subnets = STUFF((SELECT DISTINCT ','+ IP_Subnets0 
FROM dbo.v_RA_System_IPSubnets
--WHERE IP_Subnets0 = SL.Subnet  -- your where clause
WHERE SiteName = SL.SiteName     -- you want to match on sitename         
FOR XML PATH('')), 1, 1, '')
FROM
@SiteList SL

最新更新