Мы переносим серверную часть базы данных из Access в SQL Server.
Одно из имен полей - Key
. Теперь Key
является зарезервированным словом в Access и SQL Server , поэтому обходной путь в Access всегда заключался в том, чтобы заключить квадратные скобки вокруг имени поля.
При подключении к Access мы генерировали коллекцию OleDBParameter
для каждого OleDBCommand
. Проверка команды CommandText
во время выполнения выдает что-то вроде UPDATE Foo SET [Key]=? WHERE etc
, потому что помните, что OleDB / Access не имеет именованных параметров, только ?
. Это было все в порядке.
Перенесемся в наше время и, используя SQL Server, мы делаем то же самое с SqlCommand
и SQLParameter
. Итак, во время выполнения CommandText
читает что-то вроде UPDATE Foo SET [Key]=@Key WHERE etc
, потому что SQL не нравится старый знак вопроса, и мы должны начать использовать именованные параметры.
Проблема в том, что приложение задыхается от этой команды, говоря:
Incorrect syntax near 'varchar'. Must declare the scalar variable "@Key"
Это касается только таблицы с именем поля Key
. Все остальное пережило миграцию на SQL, и с другими таблицами (без зарезервированных слов для имен полей) все в порядке.
Я понимаю, что одно из решений состоит в том, чтобы избежать использования зарезервированного слова в качестве имени поля, но я надеюсь на ответ, который позволит нам обойти зарезервированное слово, как мы всегда привыкли.