sp_MSforeachdb MS SQL ошибка - PullRequest
       23

sp_MSforeachdb MS SQL ошибка

0 голосов
/ 11 апреля 2009

Это для MS SQL 2005: кто-нибудь знает, почему первый завершается успешно, а затем не удается создать два одинаковых оператора подряд? Все утверждения абсолютно одинаковы. Изменение двойной кавычки на две одинарных кавычки имеет тот же эффект.

sp _ MSforeachdb @ command1 = 'if (left ("?", 2) = "p _") begin; Распечатать "?"; конец; ';

производит

р _ NationalBrands
р _ NonBrand
р _ База данных _ Имя _ That _ Начало _ С _ P _ 1019 * подчеркивание *

но

sp _ MSforeachdb @ command1 = 'if (left ("?", 2) = "p _") begin; Распечатать "?"; конец; ';
sp _ MSforeachdb @ command1 = 'if (left ("?", 2) = "p _") begin; Распечатать "?"; конец; ';

производит

Сообщение 102, Уровень 15, Состояние 1, Строка 2 Неверный синтаксис рядом с sp_MSforeachdb.

Ответы [ 2 ]

1 голос
/ 11 апреля 2009

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

1 голос
/ 11 апреля 2009

Вам нужно явно использовать Exec при вызове нескольких процедур таким образом, попробуйте

sp_MSforeachdb @command1 = 'if (left("?", 2) = "p_") begin; print "?"; end;';
exec sp_MSforeachdb @command1 ='if(left("?", 2) = "p_") begin; print "?"; end;';

из документации по Выполнить

Использование EXECUTE с хранимыми процедурами

Вам не нужно указывать EXECUTE ключевое слово при выполнении сохранено процедуры, когда заявление является первый в партии.

...