我使用下面的脚本来缩小数据库。我知道即使不是最佳实践,但要求缩小。有没有办法在每次进入缩小的脚本时获取最新的数据库名称。目前我手动做但需要自动完成。请有人建议。
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
答案 0 :(得分:1)
本声明可能会对您有所帮助
SELECT TOP 1 NAME FROM SYS.DATABASES WHERE name<>'tempdb' ORDER BY create_date DESC
答案 1 :(得分:1)
以下是您可以使用的几种方法:
方法A:Dynamic SQL
这个查询有点陈旧且可以改进,它将shrink语句写入变量。然后执行该变量。
为简洁起见,我没有包括完整的缩减声明。编辑以+ 'USE ' + QUOTENAME(d.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;
Integration Services包含许多执行维护工作的任务。其中之一是Shrink Database Task。 SQL Server包含wizard,可以帮助您编写和安排工作。
可以使用SQL Agent安排这两种方法。
修改强>
已更正的查询,其中包含未声明的变量。