Sql server 如何在Shrink数据库sql脚本中提供最新的数据库名称?

Sql server 如何在Shrink数据库sql脚本中提供最新的数据库名称?,sql-server,tsql,Sql Server,Tsql,我用下面的脚本来缩小数据库。我知道即使不是最好的做法,但有做心理医生的要求。是否有任何方法可以每次将最新的数据库名称放入脚本中进行收缩。目前我正在手动操作,但需要自动操作。请任何人提出建议 USE [Sales_backup_2016_08_10_203001_7966467] ALTER DATABASE [Sales_backup_2016_08_10_203001_7966467] SET RECOVERY SIMPLE DBCC SHRINKFILE (Sales_Data) GO US

我用下面的脚本来缩小数据库。我知道即使不是最好的做法,但有做心理医生的要求。是否有任何方法可以每次将最新的数据库名称放入脚本中进行收缩。目前我正在手动操作,但需要自动操作。请任何人提出建议

USE [Sales_backup_2016_08_10_203001_7966467]
ALTER DATABASE [Sales_backup_2016_08_10_203001_7966467]
SET RECOVERY SIMPLE
DBCC SHRINKFILE (Sales_Data)
GO
USE [Sales_backup_2016_08_10_203001_7966467]
DBCC SHRINKFILE (Sales_Log,0)
GO
ALTER DATABASE [Sales_backup_2016_08_10_203001_7966467]
SET RECOVERY SIMPLE
DBCC SHRINKFILE (Sales_Log,0)
GO

这句话可能对你有帮助


从SYS.DATABASES中选择前1个名称,其中名称“tempdb”按create_date DESC排序

方法A:

这个查询有点旧,可以改进,它将shrink语句写入一个变量。然后执行变量

为简洁起见,我没有包含完整的shrink语句。编辑以“+”USE“+quoteName.name…”开头的行

此查询最好在结果到文本模式Ctrl+T中查看,因为它使用换行符使内容更易于人类阅读

    DECLARE @Qry NVARCHAR(MAX)  = ''        -- The dynamic SQL is written to this var.

    -- Populate @Qry.
    SELECT  
        @Qry = @Qry 
            + 'USE ' + QUOTENAME(d.name) + '; ALTER DATABASE ' + QUOTENAME(d.name) + ' ...;'
            + CHAR(10) 
    FROM    
        sys.Databases d
    WHERE   
        d.[State] =0 
        AND LOWER(d.Name) <> 'tempdb'
    ;

/* Enable the first line to run.
 * Disable the bottom line, when you are happy with the script.
 */
-- EXECUTE sp_ExecuteSQL @Qry
SELECT @Qry;
方法B:

Integration Services包括许多用于执行维护工作的任务。其中一个是。SQL Server包括一个可帮助您编写和安排作业的工具

这两种方法都可以使用调度

编辑


更正了包含未声明变量的查询。

谢谢。这将提供最新的数据库名称。如何将此语句包含到我在票证中添加的shrink db脚本中。请建议。我的意思是如何使用从您发布的select查询中获得的最新数据库名称。有关从多行构建单个字符串的详细信息,请参阅此。您将看到,上面使用的方法不是当前的最佳实践,甚至可能在我多年前第一次编写此查询时也不是。谢谢。当我执行execute sp_executesql@bkuscript时,显示错误的必须声明bkuscript。所以,我将bkuscript替换为qry,然后执行查询,结果命令成功完成。但数据库并没有缩小。我遗漏了什么吗?请建议。抱歉!复制和粘贴失败。我将更新示例。您将var更改为Qry是正确的。这个过程花了多长时间?如果将Qry的内容粘贴到单独的窗口中,它是否正确运行?当我在单独的、显示为NULL的同一窗口中执行查询时。没有显示任何内容。我需要改变什么吗?我知道这里发生了什么。任意字符串+NULL=NULL这就是为什么第一行是DECLARE@Qry-NVARCHARMAX=;。如果您编辑您的问题以包含我的查询的您的版本,我可以帮助您修复它。