add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
5 rows affected
ColumnName NonNullCount Datatype PrimaryKey
ID 3 int(10,0) Yes
SomeString 2 varchar(10) No
BigText 2 nvarchar(MAX) No
Numerical 2 decimal(10,2) No
Hex 3 varbinary(12) No
Floating 3 real(24) No
SomeDate 3 datetime2(0) No
ForeignKey 2 int(10,0) No
WITH Counts AS (
    SELECT @Table AS TableName,COUNT([ID]) AS [ID],
           COUNT([SomeString]) AS [SomeString],
           COUNT([BigText]) AS [BigText],
           COUNT([Numerical]) AS [Numerical],
           COUNT([Hex]) AS [Hex],
           COUNT([Floating]) AS [Floating],
           COUNT([SomeDate]) AS [SomeDate],
           COUNT([ForeignKey]) AS [ForeignKey]
    FROM [SampleTable])
SELECT V.ColumnName,
       V.NonNullCount,
       ISC.DATA_TYPE + DT.S AS Datatype,
       ISNULL(PK.IsPrimaryKey,'No') AS PrimaryKey
FROM Counts C
     CROSS APPLY(VALUES(N'ID',C.[ID]),
                       (N'SomeString',C.[SomeString]),
                       (N'BigText',C.[BigText]),
                       (N'Numerical',C.[Numerical]),
                       (N'Hex',C.[Hex]),
                       (N'Floating',C.[Floating]),
                       (N'SomeDate',C.[SomeDate]),
                       (N'ForeignKey',C.[ForeignKey]))V(ColumnName,NonNullCount)
     JOIN INFORMATION_SCHEMA.COLUMNS ISC ON C.TableName = ISC.TABLE_NAME
                                        AND V.ColumnName = ISC.COLUMN_NAME
     CROSS APPLY (VALUES('(' + STUFF(CONCAT(',' + CASE ISC.CHARACTER_MAXIMUM_LENGTH WHEN -1 THEN 'MAX' ELSE CONVERT(varchar(4),ISC.CHARACTER_MAXIMUM_LENGTH) END,',' + CONVERT(varchar(4),ISC.NUMERIC_PRECISION),',' + CONVERT(varchar(4),ISC.NUMERIC_SCALE),',' + CONVERT(varchar(4),ISC.DATETIME_PRECISION)),1,1,'') + ')')) DT(S)
     OUTER APPLY(SELECT 'Yes' AS IsPrimaryKey 
                 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
                      JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU ON TC.TABLE_NAME = KCU.TABLE_NAME
                                                                  AND TC.CONSTRAINT_NAME = KCU.CONSTRAINT_NAME
                 WHERE TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
                   AND KCU.COLUMN_NAME = V.ColumnName
                   AND TC.TABLE_NAME = ISC.TABLE_NAME) PK
Warning: Null value is eliminated by an aggregate or other SET operation.