SQL将所有可空列转换为不可为空的列

时间:2015-11-17 04:14:03

标签: c# sql sql-server-2008-r2

我有一个200多个表的数据库。

现在我需要一个SQL脚本来查找&转换所有" nullable Int" to" nonnullable Int"列(假设数据库为空)。

我知道可以一个接一个地手动完成

ALTER TABLE myTable 
ALTER COLUMN myColumn {DataType} NOT NULL DEFAULT(0)

但我认为应该有更好的方法来做到这一点,如果你能提出建议,那将会很有帮助。

3 个答案:

答案 0 :(得分:3)

使用此SQL:

DECLARE @TableName NVARCHAR(255)
DECLARE @ColumnName NVARCHAR(255)

DECLARE @Cursor CURSOR
SET @Cursor = CURSOR FAST_FORWARD
FOR SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = 'dbo' AND IS_NULLABLE = 'YES' AND DATA_TYPE = 'int'
OPEN @Cursor FETCH NEXT FROM @Cursor INTO @TableName, @ColumnName
WHILE @@FETCH_STATUS = 0
BEGIN
    ALTER TABLE @TableName ALTER COLUMN @ColumnName INT NOT NULL DEFAULT(0)
    FETCH NEXT FROM @Cursor INTO @TableName, @ColumnName
END
CLOSE @Cursor
DEALLOCATE @Cursor

答案 1 :(得分:0)

糟糕...

https://msdn.microsoft.com/ja-jp/library/ms190273.aspx

NULL | NOT NULL

如果新列不允许空值且表不为空,则必须使用新列添加DEFAULT定义,并且新列将自动加载每个现有行的新列中的默认值

你也可以看到......

Add a column with a default value to an existing table in SQL Server

干杯!

答案 2 :(得分:0)

没有。您可以添加多个列,但必须为要更改的每个列使用单独的alter table语句。

有关参考,请参阅此处的ALTER TABLE语法http://msdn.microsoft.com/en-US/library/ms190273.aspx