我有一个200多个表的数据库。
现在我需要一个SQL脚本来查找&转换所有" nullable Int" to" nonnullable Int"列(假设数据库为空)。
我知道可以一个接一个地手动完成
ALTER TABLE myTable
ALTER COLUMN myColumn {DataType} NOT NULL DEFAULT(0)
但我认为应该有更好的方法来做到这一点,如果你能提出建议,那将会很有帮助。
答案 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