Почему мои скобки безопасности на самом деле ПРЕДОТВРАЩАЮТ этот SQL от работы?

У меня есть код, который ранее, по-видимому, нуждался в применении скобок к оператору SQL из-за столбца с именем «Имя»; "фиксированный" код был:

dynSQL = string.Format("DELETE FROM Platypi WHERE duckbill = '{0}' and [Name] = '{1}'", tmpType, tmpStr);

К сожалению, этот код не справлялся со своей задачей - запись не удалялась. Снятие скобок вокруг столбца «Имя»:

dynSQL = string.Format("DELETE FROM Platypi WHERE duckbill = '{0}' and Name = '{1}'", tmpType, tmpStr);

... заставили его работать. Почему добавление «подтяжки» к имени столбца может привести к тому, что столбец не будет распознан? Ответ на вопрос здесь указывает, что заключение имен столбцов (и имен таблиц) в скобки — это безопасный способ избежать конфликтов имен с другими ключевыми словами объектов/баз данных и т.п.

Когда SQL со скобками терпит неудачу, сообщение об ошибке не отображается, оно просто не работает.

Обратите внимание, однако, что это непоследовательно; иногда SQL, который содержит «[Имя]», а не «Имя», работает нормально - IOW, иногда работает тот же оператор SQL с тем же значением для «утконоса», но с другим для «Имени»; с «valerie» это не удается (когда столбец с именем «Name» заключен в скобки).


person B. Clay Shannon    schedule 18.08.2014    source источник
comment
Я мог предположить, что это может быть связано с регистром идентификатора. Обычно это не происходит в SQL Server. SQL Server CE отличается по-разному, и я могу представить, что определенный код настройки интернационализации дает эффект, который вы видите.   -  person Gordon Linoff    schedule 19.08.2014
comment
не могли бы вы повторить содержимое dynSQL?   -  person ludwigmace    schedule 19.08.2014
comment
@ludwigmace: УДАЛИТЬ ИЗ Platypi, ГДЕ утконос = 'INV' и [Имя] = 'valerie' вместо УДАЛИТЬ ИЗ Platypi, ГДЕ утконос = 'INV' и Имя = 'valerie' Первый не удается, второй успешно.   -  person B. Clay Shannon    schedule 19.08.2014
comment
Это действительно странно. Поскольку это странно, вы не пробовали заключать ненужные скобки вокруг каждого предложения или точку с запятой в конце? Я бы сделал это, но у меня нет Visual Studio/SQLCE там, где я нахожусь.   -  person ludwigmace    schedule 19.08.2014
comment
@ludwigmace: Что может делать точка с запятой? Какой цели он должен служить?   -  person B. Clay Shannon    schedule 19.08.2014
comment
Поскольку SQLCE не обязательно является Transact SQL, я решил, что выброшу это. Также не похоже, что имя зарезервировано. (см. ссылку в моем ответе)   -  person ludwigmace    schedule 19.08.2014


Ответы (1)


Вот так. Похоже, скобки не поддерживаются. Вместо этого используйте двойные кавычки.

http://technet.microsoft.com/en-us/library/ms174147(v=sql.110).aspx

person ludwigmace    schedule 19.08.2014