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 при выполнении хранимых процедур, когда оператор является первым в пакете.

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