2015-11-17 4 views
2

У меня есть база данных с 200 плюс таблицами.SQL конвертировать все столбцы с нулевым значением в столбцы с нулевым значением

Теперь мне нужен сценарий SQL, чтобы найти & конвертировать все «nullable Int» в столбцы «nonnullable Int» (предположим, что база данных пуста).

Я знаю, что это может быть сделано вручную, по одному

ALTER TABLE myTable 
ALTER COLUMN myColumn {DataType} NOT NULL DEFAULT(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 
+0

Спасибо за ваше предложение. Есть ли способ, что я просто предоставляю имя базы данных и получаю все nullable int coulmn во всех таблицах get Altered? –

+0

@DCODE: инструкция SQL 'SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'dbo' И IS_NULLABLE = 'YES' И DATA_TYPE = 'int'' делает именно это! – Moon

+0

Спасибо, очень признателен за это. –

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

Ура!

0

Нет. Вы можете добавить несколько столбцов, но для каждого столбца, который вы хотите изменить, вы должны использовать отдельный оператор alter table.

Для справки, см ALTER TABLE синтаксис здесь http://msdn.microsoft.com/en-US/library/ms190273.aspx

+0

лунная значит»работал? Я думаю, это работает. Я хотел бы оценить MOON за мысль об использовании курсоров. –

+0

Спасибо, Бхану! Оно работает. Я попробовал. – Moon

Смежные вопросы