sp_MSforeachdb MS SQL ошибка
Это для MS SQL 2005: Кто-нибудь знает, почему первый завершается успешно, а затем не удается создать два одинаковых оператора подряд? Все утверждения абсолютно одинаковы. Изменение двойной кавычки на две одинарные кавычки имеет тот же эффект.
зр
_
MSforeachdb @ command1 = 'if (left ("?", 2) = "p_
") начало; печать"? "; конец; ';производит
п
_
NationalBrands
п_
NonBrand
п_
База данных_
название_
Тот_
Начинает_
С_
п_
подчеркивание
но
зр
_
MSforeachdb @ command1 = 'if (left ("?", 2) = "p_
") начало; печать"? "; конец; ';
зр_
MSforeachdb @ command1 = 'if (left ("?", 2) = "p_
") начало; печать"? "; конец; ';производит
Сообщение 102, уровень 15, состояние 1, строка 2 Неверный синтаксис рядом с sp_MSforeachdb.
2 ответа
Несколько сохраненных вызовов процедур в одном пакете, для каждого из которых требуется EXEC(UTE)
EXEC sp_MSforeachdb @command1 = 'if (left(''?'', 2) = ''p_'') begin; print ''?''; end;';
EXEC sp_MSforeachdb @command1 = 'if (left(''?'', 2) = ''p_'') begin; print ''?''; end;';
Я бы всегда использовал 2 одинарные кавычки, а не двойные, чтобы избежать проблем с настройкой среды QUOTED_IDENTIFERS.
Вам нужно явно использовать Exec при вызове нескольких процедур таким образом, попробуйте
sp_MSforeachdb @command1 = 'if (left("?", 2) = "p_") begin; print "?"; end;';
exec sp_MSforeachdb @command1 ='if(left("?", 2) = "p_") begin; print "?"; end;';
из документации для Execute
Использование EXECUTE с хранимыми процедурами
Вам не нужно указывать ключевое слово EXECUTE при выполнении хранимых процедур, когда оператор является первым в пакете.