#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 . И в какой — то момент вам нужно применить это ограничение-так почему бы не ПРОВЕРИТЬ?