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

本文关键字:Null 转换 SQL | 更新日期: 2023-09-27 18:22:07

我得到了一个包含200多个表的数据库。

现在我需要一个SQL脚本来查找&将所有"nullableInt"列转换为"nonnullableINT"列(假定数据库为空)。

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

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

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

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

使用此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

Oops。。。


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

NULL|NOT NULL

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

你也可以看到。。。

将具有默认值的列添加到SQL Server 中的现有表中

干杯!

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

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