Sql server 如何优化速度太慢的存储过程?
我的存储过程大约需要1分45秒,如何优化它?我尝试了一些事情,比如在插入之前创建临时表 我估计执行计划,但我不知道如何上传它 这是我的存储过程的一部分,需要更长的时间,查询成本为53%Sql server 如何优化速度太慢的存储过程?,sql-server,sql-server-2008,stored-procedures,query-performance,Sql Server,Sql Server 2008,Stored Procedures,Query Performance,我的存储过程大约需要1分45秒,如何优化它?我尝试了一些事情,比如在插入之前创建临时表 我估计执行计划,但我不知道如何上传它 这是我的存储过程的一部分,需要更长的时间,查询成本为53% SELECT Distinct BackupCTE.[InstanceName] ,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.Environme
SELECT Distinct
BackupCTE.[InstanceName]
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.EnvironmentType = 0 THEN '-1' Else CONVERT(VARCHAR,BackupCTE.EnvironmentType) END AS EnvironmentType
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.InstanceStatus = 0 THEN '-1' Else CONVERT(VARCHAR,BackupCTE.InstanceStatus) END AS [InstanceStatus]
,BackupCTE.[BackupShare]
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.DatabaseOwner = 0 THEN '-1'
WHEN ISNULL(BackupCTE.IsMirroringEnabled,0) = 0 AND BackupCTE.DatabaseOwner NOT IN ('SA') AND BackupCTE.DatabaseStatus = 'Normal' AND BackupCTE.DatabaseReadOnly = 0
AND ISNULL(BackupCTE.IsDatabaseSnapshot,0) = 0 THEN '0'
ELSE '1' END AS DatabaseOwner
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.DBRecoveryModel = 0 THEN '-1'
WHEN BackupCTE.DatabaseStatus = 'Normal' AND BackupCTE.DatabaseName NOT IN ('master', 'msdb', 'IHC_DBA','distribution','ReportServerTempDB','NavicareReporting','ReportServer') AND
BackupCTE.RecoveryModel NOT IN ('Full','BulkLogged') THEN '0'
ELSE '1'
END AS [DBRecoveryModel]
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.AutoShrink = 0 THEN '-1'
ELSE CONVERT(VARCHAR, BackupCTE.[AutoShrink]) END AS [AutoShrink]
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.AutoClose = 0 THEN '-1' Else CONVERT(VARCHAR,BackupCTE.[AutoClose]) END AS [AutoClose]
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.BackupCompression = 0 THEN '-1'
WHEN BackupCTE.[BackupCompression] = 0 THEN '0'
Else '1' END AS [BackupCompression]
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.XPCmdShell = 0 THEN '-1'
WHEN CONVERT(VARCHAR,BackupCTE.[XPCmdShell]) = 0 THEN '1'
Else '0' END AS [XPCmdShell]
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.EncryptionEnabled = 0 THEN '-1' Else CONVERT(VARCHAR,BackupCTE.[EncryptionEnabled]) END AS [EncryptionEnabled]
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.IsIdera = 0 THEN '-1' Else CONVERT(VARCHAR,BackupCTE.[IsIdera]) END AS [IsIdera]
,[HoursRetentionShare]
,[HoursSinceLastFullBackup]
,[HoursSinceLastDiffBackup]
,[HoursSinceLastLogBackup]
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.ExceededBkpTimeFrame = 0 THEN '-1' Else BackupCTE.ExceededBkpTimeFrame
END AS ExceededBkpTimeFrame
,BackupType
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.[Primary] = 0 THEN '-1' Else BackupCTE.[Primary] END AS [Primary]
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.[Secondary] = 0 THEN '-1' Else BackupCTE.[Secondary] END AS [Secondary]
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.[LockPages] = 0 THEN '-1'
Else CONVERT(varchar,BackupCTE.[LockPages]) END AS [LockPages]
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.[SADisabled] = 0 THEN '-1'
WHEN CONVERT(varchar,BackupCTE.[SADisabled]) = 0 AND BackupCTE.VersionName like 'Microsoft SQL Server 2000 %' THEN '1'
ELSE CONVERT(varchar,BackupCTE.[SADisabled])
END AS [SADisabled]
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.ServiceAccount = 0 THEN '-1'
WHEN StdServiceAccount.IsValid = 1
OR BackupCTE.ServiceAccount IN ('CO\lpsqldbadmin','lpsqldbadmin@CO.IHC.COM')
THEN '1'
ELSE '0' END AS ServiceAccount
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.[ServicePackFlag] = 0 THEN '-1' Else BackupCTE.[ServicePack] END AS [ServicePack]
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.[MaxMemory] = 0 THEN '-1' Else BackupCTE.[MaxMemory] END AS [MaxMemory]
,[JobName]
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.[JobOwner] = 0 THEN '-1'
WHEN BackupCTE.JobOwner NOT IN ('SA') AND JobEnabled = 1 AND DELETED IS NULL THEN '0'
ELSE '1' END AS JobOwner
,[JobEnabled]
,CASE WHEN BackupCTE.EnvironmentType = 'PROD' AND BackupCTE.[Primary] NOT IN ('Tamie Jensen', 'Chase Mahony','Megna Musapeta','Aaron Uppencamp') THEN '0'
WHEN BackupCTE.EnvironmentType = 'STBY' AND BackupCTE.[Primary] NOT IN ('Tamie Jensen', 'Chase Mahony','Megna Musapeta','Aaron Uppencamp') THEN '0'
ELSE '1' END AS IsNonPrimary
,CASE WHEN BackupCTE.EnvironmentType = 'PROD' AND BackupCTE.[Secondary] IN ('NONE') THEN '0'
WHEN BackupCTE.EnvironmentType = 'STBY' AND BackupCTE.[Secondary] IN ('NONE') THEN '0'
ELSE '1' END AS IsNonSecondary
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.[MaxMemory] = 0 THEN '-1'
WHEN BackupCTE.[MaxMemory]%8 = 0 THEN '1'
ELSE '0' END AS FlagMemory
,CASE WHEN BackupCTE.JobName NOT LIKE '%Insure%'
THEN
CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.MaintenanceJob = 0 THEN '-1'
WHEN JobSchMultiplier < 0 THEN '1' --One Time Job. No Need To Flag
WHEN DATEDIFF(HH, BackupCTE.JobRunDate, GETDATE()) > 24*JobSchMultiplier THEN '0'
ELSE '1'
END
ELSE '1' END AS MaintenanceJob
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.ServicePackFlag = 0 THEN '-1'
WHEN LTRIM(RTRIM(SUBSTRING(PatchingStds.ServicePack,3, LEN(PatchingStds.ServicePack)-2))) > ISNULL(LTRIM(RTRIM(SUBSTRING(InstanceSQLDTl.ServicePack,3,
LEN(InstanceSQLDTl.ServicePack)-2))),0) THEN '0'
WHEN LTRIM(RTRIM(SUBSTRING(VersionName,CHARINDEX('-',VersionName )+1,abs(CASE WHEN CHARINDEX('(',VersionName ) > 0 THEN CHARINDEX('(',VersionName )-CHARINDEX('-',VersionName) ELSE len(VersionName)-CHARINDEX('-',VersionName) end)))) <> LTRIM(RTRIM(PatchingStds.SQLBuild)) THEN '2'
ELSE '1' END AS ServicePackFlag
,VersionName
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.SAViolations = 0 THEN '-1'
WHEN LoginName Not IN ('CO\DBA Group','CO\DBAdmin') AND SYSAdmin = 1 OR SecurityAdmin = 1 OR ServerAdmin = 1 OR SetupAdmin = 1 OR ProcessAdmin = 1 OR DiskAdmin = 1
OR DBCreator = 1 OR BulkAdmin = 1 THEN '0'
ELSE '1' END AS SAViolations
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.IsBackupShare = 0 THEN '-1'
WHEN NOT (BackupCTE.[BackupShare] LIKE '\\CO.IHC.COM%' OR BackupCTE.[BackupShare] LIKE '\\CO-LP-SQL1%' OR BackupCTE.[BackupShare] LIKE '\\CO-LP-SQL2%'
OR BackupCTE.[BackupShare] LIKE '\\CO-TX-VAULT2%' OR BackupCTE.[BackupShare] LIKE '\\co-tx-vpdsfile2\txPDSsqlBackups%' AND BackupCTE.[BackupShare] NOT LIKE '%Test') OR BackupCTE.[BackupShare] = 'NONE LISTED' THEN '0'
ELSE '1' END AS IsBackupShare
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.Tempdb_DataFileCount = 0 THEN '-1'
WHEN TEMPDBFileCount.Tempdb_DataFileCount >= 8 OR TEMPDBFileCount.Tempdb_DataFileCount > TEMPDBFileCount.OptimalTempdbFilecount THEN '1'
WHEN TEMPDBFileCount.OptimalTempdbFilecount > TEMPDBFileCount.Tempdb_DataFileCount THEN '0'
ELSE '1'END AS Tempdb_DataFileCount
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.DataAutoGrow = 0 THEN '-1' ELSE BackupCTE.DataAutoGrow END AS DataAutoGrow
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.LogAutoGrow = 0 THEN '-1' ELSE BackupCTE.LogAutoGrow END AS LogAutoGrow
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.MaintVersion = 0 THEN '-1' ELSE BackupCTE.MaintVersion END AS MaintVersion
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.MaintVersion = 0 THEN '-1'
WHEN BackupCTE.MaintVersion = 2.02 OR BackupCTE.MaintVersion = 2.03 THEN '1'
ELSE '0' END AS FlagMaintVersion
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.DBCompatibilityLevel = 0 THEN '-1'
WHEN BackupCTE.DBCompatibilityLevel < 90 THEN '0'
ELSE '1' END AS DBCompatibilityLevel
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.FlagVersionName = 0 THEN '-1'
WHEN NOT (BackupCTE.VersionName LIKE 'Microsoft SQL Server 2005%' OR BackupCTE.VersionName LIKE 'Microsoft SQL Server 2000%') THEN '1'
ELSE '0' END AS FlagVersionName
,CASE WHEN DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL AND ComplianceReportExceptions.VLFCount = 0 THEN '-1'
ELSE BackupCTE.VLFCount END AS VLFCount
Into #FinalData
FROM [DBAPP].InstanceSQLDtl
LEFT JOIN #BackupCTE BackupCTE ON InstanceSQLDtl.InstanceID = BackupCTE.InstanceID
LEFT JOIN [DBAPP].[SQLPatchingStandards] PatchingStds ON LTRIM(RTRIM(LEFT(VersionName, CHARINDEX('-', VersionName)-1))) = LTRIM(RTRIM(LEFT
(PatchingStds.SQLVersion,CHARINDEX('-',PatchingStds.SQLVersion)-1)))
LEFT JOIN [DBAPP].[ComplianceReportExceptions] ON ComplianceReportExceptions.InstanceName = BackupCTE.InstanceName
LEFT JOIN [DBAPP].[TEMPDBFileCount] ON InstanceSQLDtl.InstanceID = [TEMPDBFileCount].InstanceID AND Type_DESC = 'ROWS'
LEFT JOIN DBO.fnGetServiceNames() StdServiceAccount ON BackupCTE.InstanceID = StdServiceAccount.InstanceID
Where BackupCTE.[InstanceName] IS NOT NULL
ORDER BY [InstanceName]
选择Distinct
BackupCTE.[InstanceName]
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions.EnvironmentType=0时,则为“-1”Else转换(VARCHAR,BackupCTE.EnvironmentType)以EnvironmentType结束
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions.InstanceStatus=0时,则“-1”Else转换(VARCHAR,BackupCTE.InstanceStatus)结束为[InstanceStatus]
,BackupCTE。[备份共享]
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions.DatabaseOwner=0时,则为“-1”
当ISNULL(BackupCTE.ismirroringable,0)=0且BackupCTE.DatabaseOwner不在('SA')时,BackupCTE.DatabaseStatus='Normal'且BackupCTE.DatabaseReadOnly=0
和ISNULL(BackupCTE.IsDatabaseSnapshot,0)=0,然后是“0”
否则“1”将以数据库所有者的身份结束
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions.DBRecoveryModel=0时,则为“-1”
当BackupCTE.DatabaseStatus='Normal'和BackupCTE.DatabaseName不在('master','msdb','IHC_DBA','distribution','ReportServerTempDB','navicerereporting','ReportServer')和
BackupCTE.RecoveryModel不在('Full','BulkLogged')中,然后是“0”
其他“1”
结束为[DBRecoveryModel]
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions.AutoShrink=0时,则为“-1”
ELSE转换(VARCHAR,BackupCTE.[AutoShrink])结束为[AutoShrink]
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions.AutoClose=0时,则为“-1”Else转换(VARCHAR,BackupCTE.[AutoClose])结束为[AutoClose]
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions.BackupCompression=0时,则为“-1”
当BackupCTE.[BackupCompression]=0时,则为“0”
Else“1”结束为[备份压缩]
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions.XPCmdShell=0,则为“-1”
当CONVERT(VARCHAR,BackupCTE.[XPCmdShell])=0时,则为“1”
Else“0”以[XPCmdShell]结尾
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions.EncryptionEnabled=0时,则为“-1”Else转换(VARCHAR,BackupCTE。[EncryptionEnabled])结束为[EncryptionEnabled]
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions.IsIdera=0时,则为“-1”Else转换(VARCHAR,BackupCTE.[IsIdera])结束为[IsIdera]
,[HoursRetentionShare]
,[HoursSincellastFullBackup]
,[HoursSincellastDiffBackup]
,[HoursSincellastLogBackup]
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions.ExcepedDBKPTimeFrame=0时,则为“-1”Else BackupCTE.ExcepedDBKPTimeFrame
结束时超出DbkP时间范围
,备份类型
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions.[Primary]=0时,则为“-1”Else BackupCTE.[Primary]以[Primary]结束
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions.[Secondary]=0时,则为“-1”Else BackupCTE.[Secondary]结束为[Secondary]
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions.[LockPages]=0,则为“-1”
Else转换(varchar,BackupCTE.[LockPages])结束为[LockPages]
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions。[sDisabled]=0时为大小写,则为“-1”
当CONVERT(varchar,BackupCTE.[SADisabled])=0且BackupCTE.VersionName类似于“Microsoft SQL Server 2000%”时,则为“1”
ELSE转换(varchar,BackupCTE.[SADisabled])
结束为[已禁用]
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions.ServiceAccount=0时,则为“-1”
当StdServiceAccount.IsValid=1时
或('CO\lpsqldbadmin','lpsqldbadmin@CO.IHC.COM')
然后是“1”
否则“0”将作为ServiceAccount结束
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions。[ServicePackFlag]=0时,则为“-1”Else BackupCTE。[ServicePack]以[ServicePack]结尾
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions。[MaxMemory]=0时,则为“-1”Else BackupCTE。[MaxMemory]以[MaxMemory]结尾
,[JobName]
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions。[JobOwner]=0,则为“-1”
当BackupCTE.JobOwner不在('SA')中且JobEnabled=1且DELETED为空时,则为“0”
否则“1”将以作业所有者的身份结束
,[JobEnabled]
,BackupCTE.EnvironmentType='PROD'和BackupCTE.[Primary]不在('Tamie Jensen','Chase Mahony','Megna Musapeta','Aaron Uppencamp')中时为大小写,然后为'0'
当BackupCTE.EnvironmentType='STBY'和BackupCTE.[Primary]不在('Tamie Jensen','Chase Mahony','Megna Musapeta','Aaron Uppencamp')中时,则为'0'
否则“1”结束为非主要
,当BackupCTE.EnvironmentType='PROD'和BackupCTE.[Secondary]在('NONE')中时为大小写,然后为'0'
当BackupCTE.EnvironmentType='STBY'和BackupCTE.[Secondary]位于('NONE')中时,则为'0'
否则“1”结束为非秒
,当DBAPP.ComplianceReportExceptions.InstanceName不为NULL且ComplianceReportExceptions。[MaxMemory]=0,则为“-1”
备份时[MaxMemory]
SELECT DISTINCT
BackupCTE.[InstanceName]
, EnvironmentType = CASE WHEN ComplianceReportExceptions.EnvironmentType = 0 THEN '-1' ELSE CONVERT(VARCHAR, BackupCTE.EnvironmentType) END
, [InstanceStatus] = CASE WHEN ComplianceReportExceptions.InstanceStatus = 0 THEN '-1' ELSE CONVERT(VARCHAR,BackupCTE.InstanceStatus) END
, BackupCTE.[BackupShare]
, DatabaseOwner =
CASE WHEN ComplianceReportExceptions.DatabaseOwner = 0 THEN '-1'
WHEN ISNULL(BackupCTE.IsMirroringEnabled,0) = 0
AND BackupCTE.DatabaseOwner <> 'SA'
AND BackupCTE.DatabaseStatus = 'Normal'
AND BackupCTE.DatabaseReadOnly = 0
AND ISNULL(BackupCTE.IsDatabaseSnapshot,0) = 0
THEN '0'
ELSE '1'
END
-- Etc...
INTO #FinalData
FROM [DBAPP].InstanceSQLDtl
LEFT JOIN #BackupCTE BackupCTE ON InstanceSQLDtl.InstanceID = BackupCTE.InstanceID
LEFT JOIN [DBAPP].[SQLPatchingStandards] PatchingStds ON LTRIM(RTRIM(LEFT(VersionName, CHARINDEX('-', VersionName)-1))) = LTRIM(RTRIM(LEFT
(PatchingStds.SQLVersion,CHARINDEX('-',PatchingStds.SQLVersion)-1)))
LEFT JOIN [DBAPP].[ComplianceReportExceptions] ON ComplianceReportExceptions.InstanceName = BackupCTE.InstanceName
LEFT JOIN [DBAPP].[TEMPDBFileCount] ON InstanceSQLDtl.InstanceID = [TEMPDBFileCount].InstanceID AND Type_DESC = 'ROWS'
LEFT JOIN DBO.fnGetServiceNames() StdServiceAccount ON BackupCTE.InstanceID = StdServiceAccount.InstanceID
WHERE BackupCTE.[InstanceName] IS NOT NULL
AND DBAPP.ComplianceReportExceptions.InstanceName IS NOT NULL
--****************
UNION ALL
--****************
SELECT DISTINCT
BackupCTE.[InstanceName]
, EnvironmentType = CONVERT(VARCHAR,BackupCTE.EnvironmentType)
, [InstanceStatus] = CONVERT(VARCHAR,BackupCTE.InstanceStatus)
, BackupCTE.[BackupShare]
, DatabaseOwner =
CASE
WHEN ISNULL(BackupCTE.IsMirroringEnabled,0) = 0
AND BackupCTE.DatabaseOwner <> 'SA'
AND BackupCTE.DatabaseStatus = 'Normal'
AND BackupCTE.DatabaseReadOnly = 0
AND ISNULL(BackupCTE.IsDatabaseSnapshot,0) = 0
THEN '0'
ELSE '1'
END
-- Etc...
INTO #FinalData
FROM [DBAPP].InstanceSQLDtl
LEFT JOIN #BackupCTE BackupCTE ON InstanceSQLDtl.InstanceID = BackupCTE.InstanceID
LEFT JOIN [DBAPP].[SQLPatchingStandards] PatchingStds ON LTRIM(RTRIM(LEFT(VersionName, CHARINDEX('-', VersionName)-1))) = LTRIM(RTRIM(LEFT
(PatchingStds.SQLVersion,CHARINDEX('-',PatchingStds.SQLVersion)-1)))
LEFT JOIN [DBAPP].[ComplianceReportExceptions] ON ComplianceReportExceptions.InstanceName = BackupCTE.InstanceName
LEFT JOIN [DBAPP].[TEMPDBFileCount] ON InstanceSQLDtl.InstanceID = [TEMPDBFileCount].InstanceID AND Type_DESC = 'ROWS'
LEFT JOIN DBO.fnGetServiceNames() StdServiceAccount ON BackupCTE.InstanceID = StdServiceAccount.InstanceID
WHERE BackupCTE.[InstanceName] IS NOT NULL
AND DBAPP.ComplianceReportExceptions.InstanceName IS NULL
--****************
ORDER BY [InstanceName]