這是一個有點標新立異,但試試這個:
--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]
OUTPUT:
Columns having NULLs
--------------------------------------------------
RowValue1, RowValue3
(1 row(s) affected)
如果你需要動態,因爲你不知道列名,你可以建立一個類似的命令到一個字符串然後執行。
爲什麼?什麼類型的應用程序需要這個?你也可以在你的查詢中加入'AND c.is_nullable = 1'來只循環可能有空的列。 –
在將數據移到生產數據庫之前,這是從供應商處提供給我們的數據時檢查數據所必需的。這是一個標準的質量控制檢查。 – Brian