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