ошибка синтаксиса отбрасывания сервера по умолчанию - PullRequest
3 голосов
/ 29 июня 2010

Я пытаюсь сбросить значение по умолчанию для битового столбца, я установил его неправильно и хочу сделать это снова правильно.Однако, когда я пишу:

ALTER TABLE Person
ALTER COLUMN tsHomePref DROP DEFAULT;

, я получаю «неправильный синтаксис рядом с ошибкой по умолчанию для ключевого слова», и я не знаю, почему

Я хочу удалить столбец, а затем построить его заново

ALTER TABLE Person
ADD COLUMN tsHomePref bit NOT NULL DEFAULT 0;

Итак, почему он не позволяет мне «сбросить» значение по умолчанию?

Спасибо R.

Ответы [ 2 ]

4 голосов
/ 29 июня 2010

Вам нужно было бы сделать

ALTER TABLE Person 
    DROP CONSTRAINT DF__Person__tsHomePr__05BA7BDB

Это помогает, если вы используете согласованное соглашение об именах для них, поэтому вам не нужно заглядывать в системные таблицы, чтобы получить имя первым.

3 голосов
/ 27 января 2011

Если вы не знаете название ограничения (как я не знал сегодня при поиске решения той же проблемы), вы можете использовать следующее для Ms Sqlserver:

DECLARE @defname VARCHAR(100), @cmd VARCHAR(1000)
SET @defname =
   (SELECT name FROM sysobjects so
     JOIN sysconstraints sc ON so.id = sc.constid
   WHERE object_name(so.parent_obj) = 'TableName'
     AND sc.colid = 
         (SELECT colid FROM syscolumns WHERE id = object_id('dbo.TableName') AND name = 'FieldName'))
    SET @cmd = 'ALTER TABLE TableName DROP CONSTRAINT ' + @defname
   EXEC(@cmd)
GO 

Это сработало в моем случае.Надеюсь, это поможет и другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...