Работа с тире и пробелами в функциях T-SQL String

Я ищу вхождение строки в поле таблицы. Оператор поиска выполняется через динамический SQL с моим шаблоном заявления, похожим на это.

SET @sSQL = 'UPDATE #tempProcsAndJobs SET ' + 
  @columnName + ' = 1 WHERE createStatement LIKE ''%' + 
  @columnName + '%''';

EXECUTE (@sSQL);

Выше sql выдает что-то похожее на

UPDATE #tempProcsAndJobs SET LoadSummaryTotalSales = 1 
   WHERE createStatement LIKE '%LoadSummaryTotalSales%'

Такой подход, как правило, эффективен, пока не сталкивается с чем-то вроде

UPDATE #tempProcsAndJobs SET Nightly SXe Data Transfers = 1 
  WHERE createStatement LIKE '%Nightly SXe Data Transfers%'

Затем он жалуется на синтаксическую ошибку. Я попытался использовать CHARINDEX, и та же проблема возникает, сервер ненавидит пробелы и тире. Мне было интересно, если кто-нибудь знает, как обойти это.

Любая помощь очень ценится.

1 ответ

Вам необходимо заключить имена столбцов в квадратные скобки, иначе SQL Server будет интерпретировать пробелы и тире как часть оператора, а не имя столбца.

SET @sSQL = 'UPDATE #tempProcsAndJobs SET [' + 
  @columnName + '] = 1 WHERE createStatement LIKE ''%' + 
  @columnName + '%''';

EXECUTE (@sSQL);

Это приведет к следующим утверждениям из вашего примера:

UPDATE #tempProcsAndJobs SET [LoadSummaryTotalSales] = 1 
   WHERE createStatement LIKE '%LoadSummaryTotalSales%'

а также

UPDATE #tempProcsAndJobs SET [Nightly SXe Data Transfers] = 1 
  WHERE createStatement LIKE '%Nightly SXe Data Transfers%'

оба из которых являются действительными SQL.

Другие вопросы по тегам