Назад | Перейти на главную страницу

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

Я ищу вхождение строки в поле таблицы. Оператор поиска выполняется через динамический 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, и возникает та же проблема, сервер ненавидит пробелы и тире. Мне было интересно, знает ли кто-нибудь, как это обойти.

Любая помощь приветствуется.

Вам необходимо заключить имена столбцов в квадратные скобки, иначе 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.