Try this option -
DDL:
IF OBJECT_ID ('dbo.test2') IS NOT NULL DROP TABLE dbo.test2 CREATE TABLE dbo.test2 ( ID BIGINT IDENTITY(1,1) PRIMARY KEY , Name VARCHAR(10) NOT NULL , IsCitizen BIT NULL , Age INT NULL ) INSERT INTO dbo.test2 (Name, IsCitizen, Age) VALUES ('1', 1, NULL), ('2', 0, NULL), ('3', NULL, NULL)
Request 1:
DECLARE @TableName SYSNAME , @ObjectID INT , @SQL NVARCHAR(MAX) SELECT @TableName = 'dbo.test2' , @ObjectID = OBJECT_ID(@TableName) SELECT @SQL = 'SELECT' + CHAR(13) + STUFF(( SELECT CHAR(13) + ', [' + c.name + '] = ' + CASE WHEN c.is_nullable = 0 THEN '0' ELSE 'CASE WHEN ' + totalrows + ' = SUM(CASE WHEN [' + c.name + '] IS NULL THEN 1 ELSE 0 END) THEN 1 ELSE 0 END' END FROM sys.columns c WITH (NOWAIT) CROSS JOIN ( SELECT totalrows = CAST(MIN(p.[rows]) AS VARCHAR(50)) FROM sys.partitions p WHERE p.[object_id] = @ObjectID AND p.index_id IN (0, 1) ) r WHERE c.[object_id] = @ObjectID FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, ' ') + CHAR(13) + 'FROM ' + @TableName PRINT @SQL EXEC sys.sp_executesql @SQL
Output 1:
SELECT [ID] = 0 , [Name] = 0 , [IsCitizen] = CASE WHEN 3 = SUM(CASE WHEN [IsCitizen] IS NULL THEN 1 ELSE 0 END) THEN 1 ELSE 0 END , [Age] = CASE WHEN 3 = SUM(CASE WHEN [Age] IS NULL THEN 1 ELSE 0 END) THEN 1 ELSE 0 END FROM dbo.test2
Request 2:
DECLARE @TableName SYSNAME , @SQL NVARCHAR(MAX) SELECT @TableName = 'dbo.test2' SELECT @SQL = 'SELECT' + CHAR(13) + STUFF(( SELECT CHAR(13) + ', [' + c.name + '] = ' + CASE WHEN c.is_nullable = 0 THEN '0' ELSE 'CASE WHEN '+ 'MAX(CAST([' + c.name + '] AS CHAR(1))) IS NULL THEN 1 ELSE 0 END' END FROM sys.columns c WITH (NOWAIT) WHERE c.[object_id] = OBJECT_ID(@TableName) FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, ' ') + CHAR(13) + 'FROM ' + @TableName PRINT @SQL EXEC sys.sp_executesql @SQL
Output 2:
SELECT [ID] = 0 , [Name] = 0 , [IsCitizen] = CASE WHEN MAX(CAST([IsCitizen] AS CHAR(1))) IS NULL THEN 1 ELSE 0 END , [Age] = CASE WHEN MAX(CAST([Age] AS CHAR(1))) IS NULL THEN 1 ELSE 0 END FROM dbo.test2
Results:
ID Name IsCitizen Age ----------- ----------- ----------- ----------- 0 0 0 1