我正在尝试创建一个查询,在该查询中,我遍历服务器中的所有数据库,在其上运行存储过程,并将其保存到结果表中。
这就是我到目前为止:
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}'.
是否有可能对我想要完成的事情有所了解?谢谢!
答案 0 :(得分:0)
按如下方式更新您的代码,应该这样做:
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'