Измените все разрядные столбцы на int со значением по умолчанию NULL

#sql #sql-server #tsql

Вопрос:

У меня есть база данных, в которой мы будем хранить вопросы » Да » / » Нет » в виде битов. Однако, поскольку проект движется по другому пути, нам необходимо изменить все типы битовых данных на int со значением по умолчанию NULL.

Пытаясь выполнить следующий запрос, я получаю объект, зависящий от ошибки столбца.

 ALTER TABLE dbo.Customers ALTER COLUMN **[Is item returned?]** int not null;
 

Чтобы исправить это, я пытаюсь сделать:

 ALTER TABLE dbo.Customers DROP CONSTRAINT DF_Customers_[Is item returned?]
ALTER TABLE dbo.Customers ALTER COLUMN [Is item returned?] int not null
ALTER TABLE dbo.Customers WITH NOCHECK ADD CONSTRAINT [DF_Customers_[Is item returned?]] DEFAULT NULL FOR [Is item returned?]
 

Однако тот факт, что столбец заключен в [скобки], приводит к возникновению синтаксических ошибок. Следует ли это исправить с помощью кавычек? Каково ваше мнение?

Комментарии:

1. Ваши скобки, похоже, полностью нарушены.

2. Если вы избегаете имен объектов, требующих идентификации с разделителями, то этого типа проблем можно гораздо легче избежать.

3. Спасибо за предложения, я впервые работаю над базой данных, в которой столбцы имеют такие разделители, как этот, поэтому я испортил брекетинг. Однако является ли запрос правильным? Он преобразуется в int со значением по умолчанию (NULL).

Ответ №1:

Решение в том, что мне пришлось добавить больше скобок в качестве разделителей, чтобы исправить синтаксис. Следующий запрос работает идеально:

 ALTER TABLE dbo.Customers DROP CONSTRAINT [DF_Customers_Is item returned?]
ALTER TABLE dbo.Customers ALTER COLUMN [Is item returned?] int not null
ALTER TABLE dbo.Customers WITH NOCHECK ADD CONSTRAINT [DF_Customers_Is item returned?] DEFAULT NULL FOR [Is item returned?]
 

Комментарии:

1. И все же это все еще не имеет логического смысла. Вы определили столбец как not null , поэтому добавление значения по умолчанию null-полная чушь. И переключение с bit на int кажется экстремальным. Почему бы и нет, крошка? Сколько значений на самом деле требуется столбцу типа флага? Возможно, все, что вам действительно нужно сделать, это привести исходный битовый столбец к более распространенному числовому типу данных. Похоже, это гораздо больше похоже на проблему XY . И в какой — то момент вам нужно применить это ограничение-так почему бы не ПРОВЕРИТЬ?