это немного нетрадиционно, но попробуйте это:
--set up test table
--the BEGIN TRY and ALTERs allow you to rerun entire script over and over again
BEGIN TRY
CREATE TABLE YourTable (PK int not null primary key, RowValue1 int null, RowValue2 varchar(5) null, RowValue3 datetime)
END TRY
BEGIN CATCH END CATCH
delete YourTable
ALTER TABLE YourTable ALTER COLUMN RowValue1 int NULL
ALTER TABLE YourTable ALTER COLUMN RowValue2 varchar(5) NULL
ALTER TABLE YourTable ALTER COLUMN RowValue3 datetime NULL
--setup test data
INSERT INTO YourTable VALUES (1,1111,'AAAA',GETDATE())
INSERT INTO YourTable VALUES (2,2222,'BBBB',GETDATE())
INSERT INTO YourTable VALUES (3,3333,'CCCC',GETDATE())
INSERT INTO YourTable VALUES (4,NULL,'DDDD',GETDATE())
INSERT INTO YourTable VALUES (5,5555,'EEEE',NULL)
--determine null columns
DECLARE @BadColumns varchar(50)
BEGIN TRY
ALTER TABLE YourTable ALTER COLUMN RowValue1 int NOT NULL
END TRY
BEGIN CATCH
SET @BadColumns=ISNULL(@BadColumns+', ','')+'RowValue1'
END CATCH
----------------------------------
BEGIN TRY
ALTER TABLE YourTable ALTER COLUMN RowValue2 varchar(5) NOT NULL
END TRY
BEGIN CATCH
SET @BadColumns=ISNULL(@BadColumns+', ','')+'RowValue2'
END CATCH
----------------------------------
BEGIN TRY
ALTER TABLE YourTable ALTER COLUMN RowValue3 datetime NOT NULL
END TRY
BEGIN CATCH
SET @BadColumns=ISNULL(@BadColumns+', ','')+'RowValue3'
END CATCH
--report null columns
SELECT @BadColumns AS [Columns having NULLs]
ВЫВОД:
Columns having NULLs
--------------------------------------------------
RowValue1, RowValue3
(1 row(s) affected)
если вам нужно быть динамичным, потому что вы не знаете имен столбцов, вы можете встроить подобную команду в строку и затем выполнить ее.