问题描述
我已经使用以下脚本创建了一个视图,但其中一个字段正在提取我不需要的信息。在“IsServer”列中,作为服务器的项目标有 1,不是服务器的项目标有 0。有没有办法创建视图并排除在是服务器列?我不确定如何将其构建到创建视图脚本中。
CREATE VIEW [dbo].[vw_Cherwell_Machines] AS
SELECT dbo.rptComputers.HostName,dbo.rptComputers.vendor,dbo.tblComputer.IsVirtual,dbo.rptComputers.ProcessorCount,dbo.tblComputer.IsServer,dbo.rptComputers.BiosSerialNumber,dbo.rptComputers.PhysicalMemory,dbo.rptComputers.ProcessorType,dbo.rptComputers.ProcessorSpeed,dbo.rptComputers.MostFrequentUser,dbo.tblComputer.Domain,dbo.rptComputers.ClientVersion,dbo.rptComputers.ClientInstallDate,dbo.rptComputers.ClientConfigurationName,dbo.rptComputers.Biosversion,dbo.rptComputers.BiosDate,dbo.rptComputers.Manufacturer,dbo.rptComputers.Model,dbo.rptComputers.IsPortable,dbo.rptComputers.OperatingSystem,dbo.tblComputer.OSServicePack,dbo.rptComputers.ComputerStatusCode,dbo.rptComputers.IPAddress AS 'MultipleIPAddress',CASE WHEN PATINDEX ('%[,]%',dbo.rptComputers.IPAddress) > 0 THEN
left(dbo.rptComputers.IPAddress,(PATINDEX('%[,dbo.rptComputers.IPAddress))-1)
ELSE dbo.rptComputers.IPAddress
END AS 'IPAddress',dbo.rptComputers.LastScanDate
FROM dbo.rptComputers INNER JOIN dbo.tblComputer ON dbo.rptComputers.CID = dbo.tblComputer.CID
AND dbo.rptComputers.ComputerID = dbo.tblComputer.ComputerID
GROUP BY dbo.rptComputers.HostName,dbo.rptComputers.IPAddress,dbo.rptComputers.LastScanDate
解决方法
您需要一个过滤视图;即,带有 WHERE
子句的视图。像这样(我在评论中标记了我添加到您的代码的开始/结束):
CREATE VIEW [dbo].[vw_Cherwell_Machines] AS
SELECT dbo.rptComputers.HostName,dbo.rptComputers.Vendor,dbo.tblComputer.IsVirtual,dbo.rptComputers.ProcessorCount,dbo.tblComputer.IsServer,dbo.rptComputers.BiosSerialNumber,dbo.rptComputers.PhysicalMemory,dbo.rptComputers.ProcessorType,dbo.rptComputers.ProcessorSpeed,dbo.rptComputers.MostFrequentUser,dbo.tblComputer.Domain,dbo.rptComputers.ClientVersion,dbo.rptComputers.ClientInstallDate,dbo.rptComputers.ClientConfigurationName,dbo.rptComputers.BiosVersion,dbo.rptComputers.BiosDate,dbo.rptComputers.Manufacturer,dbo.rptComputers.Model,dbo.rptComputers.IsPortable,dbo.rptComputers.OperatingSystem,dbo.tblComputer.OSServicePack,dbo.rptComputers.ComputerStatusCode,dbo.rptComputers.IPAddress AS 'MultipleIPAddress',CASE WHEN PATINDEX ('%[,]%',dbo.rptComputers.IPAddress) > 0 THEN
left(dbo.rptComputers.IPAddress,(PATINDEX('%[,dbo.rptComputers.IPAddress))-1)
ELSE dbo.rptComputers.IPAddress
END AS 'IPAddress',dbo.rptComputers.LastScanDate
FROM dbo.rptComputers INNER JOIN dbo.tblComputer ON dbo.rptComputers.CID = dbo.tblComputer.CID
AND dbo.rptComputers.ComputerID = dbo.tblComputer.ComputerID
/*begin change*/
WHERE tblComputer.IsServer = 0
/*end change*/
GROUP BY dbo.rptComputers.HostName,dbo.rptComputers.IPAddress,dbo.rptComputers.LastScanDate
文档:https://docs.microsoft.com/en-us/sql/relational-databases/indexes/create-filtered-indexes?view=sql-server-ver15 请务必查看此处的“限制”部分,以防您的环境中存在无法在此处运行的内容。