Lists SQL version and product key information. 0 true /ConfigMgr_ULB/{5C6358F2-4BB6-4a1b-A16E-8D96795D8602} Integrated 6fe7a601-d088-4e03-b266-36dd4f559a6d CMSQLDatabase =Parameters!UserTokenSIDs.Value /* Get AdminID Dataset */ SELECT dbo.fn_rbac_GetAdminIDsfromUserSIDs (@UserTokenSIDs) AS UserSIDs UserSIDs System.String CMSQLDatabase =Parameters!UserSIDs.Value SELECT CollectionID, Name FROM dbo.fn_rbac_Collection(@UserSIDs) WHERE CollectionType = 2 ORDER BY Name; true CollectionID System.String Name System.String CMSQLDatabase =Parameters!UserSIDs.Value =Parameters!CollectionID.Value =Join(Parameters!Filter.Value, ",") true /* .SYNOPSIS Gets SQL product info. .DESCRIPTION Gets SQL product info, id and product key. .NOTES Created by Ioan Popovici. Requires the usp_PivotWithDynamicColumns stored procedure (SQL Support Functions). Requires SQL Property and ProductID HWI extensions. Part of a report should not be run separately. .LINK https://MEMZ.one/SW-SQL-Server-Products .LINK https://MEMZ.one/SQL-SupportFunctions .LINK https://MEMZ.one/SW-SQL-Server-Products-CHANGELOG .LINK https://MEMZ.one/SW-SQL-Server-Products-GIT .LINK https://MEM.Zone/ISSUES */ /*##=============================================*/ /*## QUERY BODY */ /*##=============================================*/ /* #region QueryBody */ /* Test variable declaration !! Need to be commented for Production !! */ -- DECLARE @UserSIDs AS NVARCHAR(10) = 'Disabled'; -- DECLARE @CollectionID AS NVARCHAR(10) = 'SMS00001'; -- DECLARE @Filter AS NVARCHAR(20) = 'WID'; /* Variable declaration */ DECLARE @TableName AS NVARCHAR(MAX); DECLARE @NonPivotedColumn AS NVARCHAR(MAX); DECLARE @DynamicColumn AS NVARCHAR(MAX); DECLARE @AggregationColumn AS NVARCHAR(MAX); DECLARE @StaticColumnList AS NVARCHAR(MAX); /* Perform cleanup */ IF OBJECT_ID('tempdb..#SQLProducts', 'U') IS NOT NULL DROP TABLE #SQLProducts; /* Create SQLProducts table */ CREATE TABLE #SQLProducts ( ResourceID NVARCHAR(25) , SKUName NVARCHAR(100) , [Version] NVARCHAR(25) , FileVersion NVARCHAR(50) , SPLevel NVARCHAR(2) , IsClustered NVARCHAR(3) , SQMReporting NVARCHAR(3) ) /* Create SQLRelease table */ DECLARE @SQLRelease Table (FileVersion NVARCHAR(4), Release NVARCHAR(10)) /* Populate StaticColumnList */ SET @StaticColumnList = N'[SKUNAME],[VERSION],[FILEVERSION],[SPLEVEL],[CLUSTERED],[SQMREPORTING]' /* Populate SQLRelease table */ INSERT INTO @SQLRelease (FileVersion, Release) VALUES ('2022', '2022') , ('2019', '2019') , ('2017', '2017') , ('2016', '2017') , ('2015', '2016') , ('2014', '2014') , ('2013', '2014') , ('2012', '2012') , ('2011', '2012') , ('2010', '2012') , ('2009', '2008 R2') , ('2007', '2008') , ('2005', '2005') , ('2000', '2000') , ('', 'Unknown') /* Get SQL 2022 data */ INSERT INTO #SQLProducts EXECUTE dbo.usp_PivotWithDynamicColumns @TableName = N'dbo.v_GS_EXT_SQL_2022_Property0' , @NonPivotedColumn = N'ResourceID' , @DynamicColumn = N'PropertyName0' , @AggregationColumn = N'ISNULL(PropertyStrValue0, PropertyNumValue0)' , @StaticColumnList = @StaticColumnList; /* Get SQL 2019 data */ INSERT INTO #SQLProducts EXECUTE dbo.usp_PivotWithDynamicColumns @TableName = N'dbo.v_GS_EXT_SQL_2019_Property0' , @NonPivotedColumn = N'ResourceID' , @DynamicColumn = N'PropertyName0' , @AggregationColumn = N'ISNULL(PropertyStrValue0, PropertyNumValue0)' , @StaticColumnList = @StaticColumnList; /* Get SQL 2017 data */ INSERT INTO #SQLProducts EXECUTE dbo.usp_PivotWithDynamicColumns @TableName = N'dbo.v_GS_EXT_SQL_2017_Property0' , @NonPivotedColumn = N'ResourceID' , @DynamicColumn = N'PropertyName0' , @AggregationColumn = N'ISNULL(PropertyStrValue0, PropertyNumValue0)' , @StaticColumnList = @StaticColumnList; /* Get SQL 2016 data */ INSERT INTO #SQLProducts EXECUTE dbo.usp_PivotWithDynamicColumns @TableName = N'dbo.v_GS_EXT_SQL_2016_Property0' , @NonPivotedColumn = N'ResourceID' , @DynamicColumn = N'PropertyName0' , @AggregationColumn = N'ISNULL(PropertyStrValue0, PropertyNumValue0)' , @StaticColumnList = @StaticColumnList; /* Get SQL 2014 data data */ INSERT INTO #SQLProducts EXECUTE dbo.usp_PivotWithDynamicColumns @TableName = N'dbo.v_GS_EXT_SQL_2014_Property0' , @NonPivotedColumn = N'ResourceID' , @DynamicColumn = N'PropertyName0' , @AggregationColumn = N'ISNULL(PropertyStrValue0, PropertyNumValue0)' , @StaticColumnList = @StaticColumnList; /* Get SQL 2012 data */ INSERT INTO #SQLProducts EXECUTE dbo.usp_PivotWithDynamicColumns @TableName = N'dbo.v_GS_EXT_SQL_2012_Property0' , @NonPivotedColumn = N'ResourceID' , @DynamicColumn = N'PropertyName0' , @AggregationColumn = N'ISNULL(PropertyStrValue0, PropertyNumValue0)' , @StaticColumnList = @StaticColumnList; /* Get SQL 2008 data */ INSERT INTO #SQLProducts EXECUTE dbo.usp_PivotWithDynamicColumns @TableName = N'dbo.v_GS_EXT_SQL_2008_Property0' , @NonPivotedColumn = N'ResourceID' , @DynamicColumn = N'PropertyName0' , @AggregationColumn = N'ISNULL(PropertyStrValue0, PropertyNumValue0)' , @StaticColumnList = @StaticColumnList; /* Get SQL Legacy data */ INSERT INTO #SQLProducts EXECUTE dbo.usp_PivotWithDynamicColumns @TableName = N'dbo.v_GS_EXT_SQL_Legacy_Property0' , @NonPivotedColumn = N'ResourceID' , @DynamicColumn = N'PropertyName0' , @AggregationColumn = N'ISNULL(PropertyStrValue0, PropertyNumValue0)' , @StaticColumnList = @StaticColumnList; /* Aggregate result data */ WITH SQLProducts_CTE (Release, EditionGroup, [Edition], [Version], ServicePack, CUVersion, IsClustered, Bitness, CEIPReporting, ProductKey, Device, DomainOrWorkgroup, OperatingSystem, IsVirtualMachine, CPUs, PhysicalCores, LogicalCores) AS ( SELECT Release = ( 'SQL ' + (SELECT Release FROM @SQLRelease WHERE FileVersion = LEFT(SQLProducts.FileVersion, 4)) ) , EditionGroup = ( CASE WHEN SQLProducts.SKUName LIKE '%enter%' THEN 'Enterprise' WHEN SQLProducts.SKUName LIKE '%stand%' THEN 'Standard' WHEN SQLProducts.SKUName LIKE '%expre%' THEN 'Express' WHEN SQLProducts.SKUName LIKE '%devel%' THEN 'Developer' WHEN SQLProducts.SKUName LIKE '%windo%' THEN 'WID' WHEN SQLProducts.SKUName IS NULL THEN 'N/A' ELSE 'Legacy' END ) , [Edition] = ISNULL(NULLIF(SQLProducts.SKUName, ''), 'N/A') , [Version] = SQLProducts.[Version] , ServicePack = SQLProducts.SPLevel , CUVersion = SQLProducts.FileVersion , IsClustered = ( CASE SQLProducts.IsClustered WHEN 0 THEN 'No' WHEN 1 THEN 'Yes' ELSE NULL END ) , Bitness = ( CASE WHEN SQLProducts.SKUName LIKE '%64%' THEN 'x64' WHEN SQLProducts.SKUName IS NOT NULL THEN 'x86' ELSE 'N/A' END ) , CEIPReporting = ( CASE SQLProducts.SQMReporting WHEN 0 THEN 'No' WHEN 1 THEN 'Yes' ELSE NULL END ) , ProductKey = ISNULL(SQLProductID.DigitalProductID0, 'N/A') , Device = Devices.[Name] , DomainOrWorkgroup = ISNULL(Systems.Full_Domain_Name0, Systems.Resource_Domain_Or_Workgr0) , OperatingSystem = ( IIF( OperatingSystem.Caption0 != N'' , CONCAT( REPLACE(OperatingSystem.Caption0, N'Microsoft ', N''), --Remove 'Microsoft ' from OperatingSystem REPLACE(OperatingSystem.CSDVersion0, N'Service Pack ', N' SP') --Replace 'Service Pack ' with ' SP' in OperatingSystem ) , Systems.Operating_System_Name_And0 ) ) , IsVirtualMachine = ( CASE Devices.IsVirtualMachine WHEN 0 THEN 'No' WHEN 1 THEN 'Yes' ELSE NULL END ) , CPUs = COUNT(Processor.ResourceID) , PhysicalCores = SUM(Processor.NumberOfCores0) , LogicalCores = SUM(Processor.NumberOfLogicalProcessors0) FROM fn_rbac_FullCollectionMembership(@UserSIDs) AS CollectionMembers JOIN v_R_System AS Systems ON Systems.ResourceID = CollectionMembers.ResourceID JOIN v_CombinedDeviceResources AS Devices ON Devices.MachineID = CollectionMembers.ResourceID JOIN v_GS_PROCESSOR AS Processor ON Processor.ResourceID = CollectionMembers.ResourceID JOIN #SQLProducts AS SQLProducts ON SQLProducts.ResourceID = CollectionMembers.ResourceID LEFT JOIN fn_rbac_GS_OPERATING_SYSTEM(@UserSIDs) AS OperatingSystem ON OperatingSystem.ResourceID = CollectionMembers.ResourceID LEFT JOIN dbo.v_GS_EXT_SQL_PRODUCTID0 AS SQLProductID ON SQLProductID.ResourceID = SQLProducts.ResourceID AND SQLProductID.Release0 = ( SELECT Release FROM @SQLRelease WHERE FileVersion = LEFT(SQLProducts.FileVersion, 4) ) AND SQLProductID.ProductID0 IS NOT NULL WHERE CollectionMembers.CollectionID = @CollectionID GROUP BY SQLProducts.FileVersion , SQLProducts.SKUName , SQLProducts.[Version] , SQLProducts.SPLevel , SQLProducts.IsClustered , SQLProducts.SQMReporting , SQLProductID.DigitalProductID0 , Devices.[Name] , Systems.Full_Domain_Name0 , Systems.Resource_Domain_Or_Workgr0 , Systems.Operating_System_Name_and0 , Systems.Build01 , OperatingSystem.Caption0 , OperatingSystem.CSDVersion0 , Devices.IsVirtualMachine , Processor.NumberOfCores0 , Processor.NumberOfLogicalProcessors0 ) /* Filter results */ SELECT Release , EditionGroup , [Edition] , [Version] , ServicePack , CUVersion , IsClustered , Bitness , CEIPReporting , ProductKey , Device , DomainOrWorkgroup , OperatingSystem , IsVirtualMachine , CPUs , PhysicalCores , LogicalCores FROM SQLProducts_CTE WHERE EditionGroup NOT IN (@Filter) /* Perform cleanup */ IF OBJECT_ID('tempdb..#SQLProducts', 'U') IS NOT NULL DROP TABLE #SQLProducts; /* #endregion */ /*##=============================================*/ /*## END QUERY BODY */ /*##=============================================*/ true Release System.String EditionGroup System.String Edition System.String Version System.String ServicePack System.String CUVersion System.String IsClustered System.String Bitness System.String CEIPReporting System.String ProductKey System.String Device System.String DomainOrWorkgroup System.String OperatingSystem System.String IsVirtualMachine System.String CPUs System.Int32 PhysicalCores System.Int32 LogicalCores System.Int32 1.47018in 8.35556in 0.4in true true =SrsResources.Localization.GetString("Description", User!Language) 2pt 2pt 2pt 2pt true true Lists SQL version and product key information. 5pt 2pt 2pt 2pt SQLProductInfo 0.03194in 0.127cm 0.4in 9.82574in 0.44815in 0.04887in 0in 20.67956in 1 1.5pt 1.5pt 1.5pt 1.5pt 1.5pt 3.71708cm 4.02104cm 2.15604cm 2.23542cm 2.60583cm 2.35417cm 1.83854cm 0.6cm true =Fields!DomainOrWorkgroup.Value true =SrsResources.Localization.GetString("Domain or Workgroup", User!Language) LightGrey Middle 2pt 2pt 2pt 2pt true =Fields!OperatingSystem.Value true =SrsResources.Localization.GetString("OperatingSystem", User!Language) LightGrey Middle 2pt 2pt 2pt 2pt true =Fields!IsVirtualMachine.Value true =SrsResources.Localization.GetString("VM", User!Language) LightGrey Middle 2pt 2pt 2pt 2pt true =Fields!CPUs.Value true =SrsResources.Localization.GetString("CPUs", User!Language) LightGrey Middle 2pt 2pt 2pt 2pt true =Fields!PhysicalCores.Value true =SrsResources.Localization.GetString("Physical Cores", User!Language) LightGrey Middle 2pt 2pt 2pt 2pt true =Fields!LogicalCores.Value true =SrsResources.Localization.GetString("Logical Cores", User!Language) LightGrey Middle 2pt 2pt 2pt 2pt true =Sum(CountDistinct(Fields!Device.Value)) Release true =SrsResources.Localization.GetString("Total", User!Language) LightGrey Middle 2pt 2pt 2pt 2pt 0.6cm true true Middle 2pt 2pt 2pt 2pt true true Middle 2pt 2pt 2pt 2pt true true Middle 2pt 2pt 2pt 2pt true true Middle 2pt 2pt 2pt 2pt true true Middle 2pt 2pt 2pt 2pt true true Middle 2pt 2pt 2pt 2pt true true Middle 2pt 2pt 2pt 2pt 0.6cm true true WhiteSmoke Middle 2pt 2pt 2pt 2pt true true WhiteSmoke Middle 2pt 2pt 2pt 2pt true true WhiteSmoke Middle 2pt 2pt 2pt 2pt true true WhiteSmoke Middle 2pt 2pt 2pt 2pt true true WhiteSmoke Middle 2pt 2pt 2pt 2pt true true WhiteSmoke Middle 2pt 2pt 2pt 2pt true true =CountDistinct(Fields!Device.Value) WhiteSmoke Middle 2pt 2pt 2pt 2pt 0.6cm true true Middle 2pt 2pt 2pt 2pt true true Middle 2pt 2pt 2pt 2pt true true Middle 2pt 2pt 2pt 2pt true true Middle 2pt 2pt 2pt 2pt true true Middle 2pt 2pt 2pt 2pt true true Middle 2pt 2pt 2pt 2pt true true Textbox10 Middle 2pt 2pt 2pt 2pt 0.6cm true true =Fields!DomainOrWorkgroup.Value WhiteSmoke Middle 2pt 2pt 2pt 2pt true true =Fields!OperatingSystem.Value WhiteSmoke Middle 2pt 2pt 2pt 2pt true true =Fields!IsVirtualMachine.Value WhiteSmoke Middle 2pt 2pt 2pt 2pt true true =Fields!CPUs.Value WhiteSmoke Middle 2pt 2pt 2pt 2pt true true =Fields!PhysicalCores.Value WhiteSmoke Middle 2pt 2pt 2pt 2pt true true =Fields!LogicalCores.Value WhiteSmoke Middle 2pt 2pt 2pt 2pt true true =CountDistinct(Fields!Device.Value) WhiteSmoke Middle 2pt 2pt 2pt 2pt 0.6cm true true Textbox80 LightGrey Middle 2pt 2pt 2pt 2pt true true Textbox83 LightGrey Middle 2pt 2pt 2pt 2pt true true Textbox86 LightGrey Middle 2pt 2pt 2pt 2pt true true Textbox89 LightGrey Middle 2pt 2pt 2pt 2pt true true Textbox92 LightGrey Middle 2pt 2pt 2pt 2pt true true Textbox284 LightGrey Middle 2pt 2pt 2pt 2pt true true =CountDistinct(Fields!Device.Value) LightGrey Middle 2pt 2pt 2pt 2pt 2.46025cm true =Fields!Release.Value Release true =SrsResources.Localization.GetString("Release", User!Language) LightGrey Middle 2pt 2pt 2pt 2pt 2.63229cm true =Fields!EditionGroup.Value EditionGroup true =SrsResources.Localization.GetString("Edition Group", User!Language) LightGrey Middle 2pt 2pt 2pt 2pt 4.48437cm true =Fields!Edition.Value Edition true =SrsResources.Localization.GetString("Edition", User!Language) LightGrey Middle 2pt 2pt 2pt 2pt 2.71167cm true =Fields!Version.Value Edition true =SrsResources.Localization.GetString("Version", User!Language) LightGrey Middle 2pt 2pt 2pt 2pt 2.44708cm true =Fields!ServicePack.Value Edition true =SrsResources.Localization.GetString("SP", User!Language) LightGrey Middle 2pt 2pt 2pt 2pt 2.5cm true =Fields!CUVersion.Value Edition true =SrsResources.Localization.GetString("CU", User!Language) LightGrey Middle 2pt 2pt 2pt 2pt 2.38063cm true =Fields!IsClustered.Value Edition true =SrsResources.Localization.GetString("Clustered", User!Language) LightGrey Middle 2pt 2pt 2pt 2pt 2.28833cm true =Fields!Bitness.Value Edition true =SrsResources.Localization.GetString("Bitness", User!Language) LightGrey Middle 2pt 2pt 2pt 2pt 2.5cm true =Fields!CEIPReporting.Value Edition true =SrsResources.Localization.GetString("CEIP", User!Language) LightGrey Middle 2pt 2pt 2pt 2pt 5.82021cm true true =SrsResources.Localization.GetString("Product Key", User!Language) LightGrey Middle 2pt 2pt 2pt 2pt 3.37313cm true =Fields!Device.Value true =SrsResources.Localization.GetString("Device", User!Language) LightGrey Middle 2pt 2pt 2pt 2pt =Fields!Release.Value =Fields!Release.Value =Fields!EditionGroup.Value =Fields!Edition.Value =Fields!Version.Value =Fields!ServicePack.Value =Fields!CUVersion.Value =Fields!IsClustered.Value =Fields!Bitness.Value =Fields!CEIPReporting.Value =Fields!ProductKey.Value =Fields!Device.Value =Fields!DomainOrWorkgroup.Value =Fields!OperatingSystem.Value =Fields!IsVirtualMachine.Value =Fields!CPUs.Value =Fields!PhysicalCores.Value =Fields!LogicalCores.Value 2.46025cm true true =Fields!Release.Value Middle 2pt 2pt 2pt 2pt 2.63229cm true true Middle 2pt 2pt 2pt 2pt 4.48437cm true true Middle 2pt 2pt 2pt 2pt 2.71167cm true true Textbox224 Middle 2pt 2pt 2pt 2pt 2.44708cm true true Textbox225 Middle 2pt 2pt 2pt 2pt 2.5cm true true Textbox226 Middle 2pt 2pt 2pt 2pt 2.38063cm true true Textbox273 Middle 2pt 2pt 2pt 2pt 2.28833cm true true Textbox227 Middle 2pt 2pt 2pt 2pt 2.5cm true true Textbox2 Middle 2pt 2pt 2pt 2pt 5.82021cm true true Textbox228 Middle 2pt 2pt 2pt 2pt 3.37313cm true true Textbox229 Middle 2pt 2pt 2pt 2pt After =Fields!EditionGroup.Value =Fields!EditionGroup.Value 2.63229cm true true =Fields!EditionGroup.Value WhiteSmoke Middle 2pt 2pt 2pt 2pt 4.48437cm true true WhiteSmoke Middle 2pt 2pt 2pt 2pt 2.71167cm true true Textbox156 WhiteSmoke Middle 2pt 2pt 2pt 2pt 2.44708cm true true Textbox157 WhiteSmoke Middle 2pt 2pt 2pt 2pt 2.5cm true true Textbox158 WhiteSmoke Middle 2pt 2pt 2pt 2pt 2.38063cm true true Textbox274 WhiteSmoke Middle 2pt 2pt 2pt 2pt 2.28833cm true true Textbox159 WhiteSmoke Middle 2pt 2pt 2pt 2pt 2.5cm true true Textbox3 WhiteSmoke Middle 2pt 2pt 2pt 2pt 5.82021cm true true Textbox160 WhiteSmoke Middle 2pt 2pt 2pt 2pt 3.37313cm true true Textbox169 WhiteSmoke Middle 2pt 2pt 2pt 2pt After =Fields!Edition.Value =Fields!Edition.Value 4.48437cm true true =Fields!Edition.Value Middle 2pt 2pt 2pt 2pt =Fields!Version.Value =Fields!Version.Value 2.71167cm true true =Fields!Version.Value Middle 2pt 2pt 2pt 2pt =Fields!ServicePack.Value =Fields!ServicePack.Value 2.44708cm true true =Fields!ServicePack.Value Middle 2pt 2pt 2pt 2pt =Fields!CUVersion.Value =Fields!CUVersion.Value 2.5cm true true =Fields!CUVersion.Value Middle 2pt 2pt 2pt 2pt 2.38063cm true true =Fields!IsClustered.Value Middle 2pt 2pt 2pt 2pt =Fields!Bitness.Value =Fields!Bitness.Value 2.28833cm true true =Fields!Bitness.Value Middle 2pt 2pt 2pt 2pt =Fields!CEIPReporting.Value =Fields!CEIPReporting.Value 2.5cm true true =Fields!CEIPReporting.Value Middle 2pt 2pt 2pt 2pt 5.82021cm true true ProductKey Middle 2pt 2pt 2pt 2pt 3.37313cm true true Textbox300 Middle 2pt 2pt 2pt 2pt =Fields!ProductKey.Value 5.82021cm true true =IIF(Fields!EditionGroup.Value <> "Express" and Fields!EditionGroup.Value <> "Developer", IIF(Parameters!HideProductKey.Value = false, Code.GetSQLProductKey(Split(Replace(Fields!ProductKey.Value, " ",""), ","), Left(Fields!Version.Value, 2)), "Hidden"), Nothing) WhiteSmoke Middle 2pt 2pt 2pt 2pt 3.37313cm true true =Fields!Device.Value WhiteSmoke Middle 2pt 2pt 2pt 2pt TV_CEIPReporting TV_EditionGroup TV_Release 2.46025cm true true Total LightGrey Middle 2pt 2pt 2pt 2pt 2.63229cm true true LightGrey Middle 2pt 2pt 2pt 2pt 4.48437cm true true LightGrey Middle 2pt 2pt 2pt 2pt 2.71167cm true true LightGrey Middle 2pt 2pt 2pt 2pt 2.44708cm true true LightGrey Middle 2pt 2pt 2pt 2pt 2.5cm true true LightGrey Middle 2pt 2pt 2pt 2pt 2.38063cm true true LightGrey Middle 2pt 2pt 2pt 2pt 2.28833cm true true LightGrey Middle 2pt 2pt 2pt 2pt 2.5cm true true LightGrey Middle 2pt 2pt 2pt 2pt 5.82021cm true true LightGrey Middle 2pt 2pt 2pt 2pt 3.37313cm true true LightGrey Middle 2pt 2pt 2pt 2pt SQLProductInfo 1.2997cm 0.12413cm 3.6cm 52.52608cm 2 4.8997cm 52.80896cm 2.49515cm true true true true =SrsResources.Localization.GetString(Globals!ReportName, User!Language) 1.59698cm 0.127cm 0.89817cm 24.95739cm Middle 2pt 2pt 2pt 2pt 0.60444in 0.05in 0in 20.67843in 1 0.75pt 0.75pt 0.75pt 0.75pt 0.75pt 1.25148cm true true true true ="Page: " + Globals!PageNumber.ToString() + "of " + Globals!TotalPages.ToString() 0.38806cm 0.12413cm 0.63492cm 2.79292cm 0.06944in 0.04887in 0in 20.67956in 1 1.5pt 1.5pt 1.5pt 1.5pt 1.5pt 21cm 29.7cm 2.54cm 2.54cm 2.54cm 2.54cm 1.27cm