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:
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