Работа с тире и пробелами в функциях 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.