小编Jos*_*ski的帖子

在调用数据库上下文中执行的中央存储过程

我正在使用该sys.dm_db_index_physical_stats视图开发定制的维护解决方案。我目前从存储过程中引用它。现在,当该存储过程在我的一个数据库上运行时,它会执行我想要它做的事情并拉下有关任何数据库的所有记录的列表。当我将它放在不同的数据库上时,它会拉下与该数据库相关的所有记录的列表。

例如(底部的代码):

  • 针对数据库 6 运行的查询显示了数据库 1-10 的 [请求] 信息。
  • 针对数据库 3 运行的查询仅显示数据库 3 的 [请求] 信息。

我希望这个过程专门针对数据库 3 的原因是因为我更愿意将所有维护对象保留在同一个数据库中。我希望这项工作位于维护数据库中,并像在该应用程序数据库中一样工作。

代码:

ALTER PROCEDURE [dbo].[GetFragStats] 
    @databaseName   NVARCHAR(64) = NULL
    ,@tableName     NVARCHAR(64) = NULL
    ,@indexID       INT          = NULL
    ,@partNumber    INT          = NULL
    ,@Mode          NVARCHAR(64) = 'DETAILED'
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @databaseID INT, @tableID INT

    IF @databaseName IS NOT NULL
        AND @databaseName NOT IN ('tempdb','ReportServerTempDB')
    BEGIN
        SET @databaseID = DB_ID(@databaseName)
    END

    IF @tableName IS NOT NULL
    BEGIN
        SET @tableID = …
Run Code Online (Sandbox Code Playgroud)

index sql-server-2008 sql-server stored-procedures maintenance

17
推荐指数
2
解决办法
1万
查看次数