2013-04-03 3 views
1

У меня есть таблица и в режиме проектирования столбец имеет [square brackets] вокруг имени столбца. Из чего это? Я не могу удалить его, и это вызывает проблемы.SQL Server с проблемой столбца при переименовании

enter image description here

+3

Содержимое заблокировано организации Причина: Эта Категория Websense фильтруется: личное сетевое хранилище и резервное копирование. URL: http://screencast.com/t/KQZAWzkt – swasheck

+3

Действительно? Как возникают проблемы с '' '' '' '' '' ''? Какие «проблемы» они вызывают? Если вы не используете [этот язык] (http://gbf.sourceforge.net/), в котором '[' является ключевым словом. – swasheck

ответ

9

В названии вашей колонки используется reserved keyword. Если вам не нравятся квадратные скобки, они потребуются во многих сценариях, поэтому, возможно, вам следует рассмотреть либо (a) использование незарезервированного слова (например, IsDefault), либо (b) не использовать конструктор , Возможно оба.

+1

Даун-избиратель, не прочь прокомментировать? –

+1

Я столкнулся с этим вопросом один раз при переименовании таблицы. «Exec sp_rename» [схема]. [Tablename] ',' [newTable] ''приведет к этому. Отличие состоит в том, что первое является эталонным, а второе - определением. –

+1

@AaronBertrand Это лучший ответ концептуально, но для решения проблемы сразу я добавил правильный синтаксис для обработки переименования в качестве ответа. Я сталкивался с этой проблемой раньше и нуждался в ней, поэтому я думаю, что это может помочь кому-то найти тот же ответ. –

0

Обычно это когда поле имеет специальные символы в нем (как и пространство). Попробуйте сделать его только символами и/или цифрами, и он должен уйти.

2

В режиме «Дизайн таблицы», если вы укажете любое имя столбца как «По умолчанию», оно будет автоматически окружено [], потому что по умолчанию это зарезервированное ключевое слово. Вы можете удалить его, щелкнув правой кнопкой мыши строку и удалить ее.

0

Идентификаторы, которые не соответствуют всем правилам для идентификаторов, должны быть разделены в инструкции Transact-SQL. Например:

SELECT * 
FROM [My Table]  --Identifier contains a space and uses a reserved keyword. 
WHERE [order] = 10 --Identifier is a reserved keyword. 

Ref: MSDN для конкретной документации: http://msdn.microsoft.com/en-US/library/ms175874%28v=SQL.90%29.aspx

5

Чтобы избавиться от скобок сделать ...

Exec sp_rename '[schema].[table].[[DEFAULT]]]', 'BetterColumnName', 'Column'; 
+0

+1 хороший момент ... однако у меня нет проблем, щелкнув правой кнопкой мыши в поле имени столбца и переименовав его вручную (я не могу сохранить его без скобок, если я продолжу выбирать зарезервированное ключевое слово, но я не 't явно нужно использовать 'sp_rename', если я хочу более разумное имя). Конечно, я использую SSMS 2012; возможно, предыдущие версии были не так дружелюбны с этим. –

+0

@AaronBertrand Ah, gotcha, я никогда не использовал режим дизайна, поэтому я не знал об этом ограничении. Object explorer и sp_rename позволят мне изменить имя столбца на «DEFAULT» без скобок, но я вижу вашу точку. Ситуация, в которой я находилась, заслуживает этого, заключается в переименовании таблицы, которая была неправильно переименована в окружение. Вместо использования объектного проводника в более 500 базах данных я просто запускал сценарий развертывания. ;) –

+0

Да, имеет смысл. Современные версии инструмента должны отлично справляться с сценарием OP, но если они настаивают на использовании зарезервированных ключевых слов * и * 8-летних версий ... –

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