Выполнение хранимой процедуры на всех базах данных и сохранение всех результатов в таблицу
Я пытаюсь создать запрос, в котором я перебираю все базы данных на сервере, запускаю хранимую процедуру на нем и сохраняю его в таблицу результатов.
Это то, что я до сих пор:
CREATE table results (Severity INT, PurchaseOrderNumber INT,
PurchaseOrderLineNumber SMALLINT, ShipmentNumber SMALLINT,
ErrorCode int, ErrorText VARCHAR(256), DateCreated datetime)
EXECUTE sp_msForEachDB '
IF "?" LIKE "VIS%"
BEGIN
USE "?"
INSERT INTO results EXECUTE IC_PURCHASEORDER
END
'
SELECT * FROM results
DROP TABLE results
С помощью этого кода я надеюсь выполнить хранимую процедуру IC_PURCHASEORDER над всеми базами данных на сервере и записать результат в созданную таблицу результатов. После этого я смогу отправить эти результаты по электронной почте руководителю, а затем отбросить таблицу, но это работа для другого дня. Я знаю, что в операторе IF существует синтаксическая ошибка, которая приводит к следующей ошибке
Msg 102, Level 15, State 1, Line 4
Incorrect syntax near '{insert database name here}'.
Можно ли получить некоторое представление о том, чего я пытаюсь достичь? Спасибо!
1 ответ
Обновите ваш код следующим образом, следует сделать свое дело:
CREATE table results (Severity INT, PurchaseOrderNumber INT,
PurchaseOrderLineNumber SMALLINT, ShipmentNumber SMALLINT,
ErrorCode int, ErrorText VARCHAR(256), DateCreated datetime)
exec sp_msForEachDB 'use [?];
if ''?'' like ''vis%''
begin
if object_id(''IC_PURCHASEORDER'') is not null
begin
INSERT INTO results EXECUTE IC_PURCHASEORDER
end
else
begin
print ''missing proc in ?''
end
end'
SELECT * FROM results
DROP TABLE results
Простой тест... запустите это, он покажет вам все базы данных как "%a%":
exec sp_msForEachDB 'use [?];
if ''?'' like ''%a%''
begin
select ''? is like a''
end
else
begin
select ''? is not like a''
end'