使用查询结果创建作业(Sql 2008)

时间:2014-11-07 12:16:34

标签: sql-server sql-server-2008 jobs proc

早上好朋友。

有没有办法运行proc,并带有此查询的结果集?

SELECT 
  'USE [' + d.name + N']' + CHAR(13) + CHAR(10) +  
  'ALTER DATABASE [' + d.name + N'] SET RECOVERY SIMPLE ' +
+ 'DBCC SHRINKFILE (N''' + mf.name + N''' , 0, TRUNCATEONLY)' 
+ CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) 
+ 'ALTER DATABASE [' + d.name + N'] SET RECOVERY full'
FROM 
     sys.master_files mf 
JOIN sys.databases d 
    ON mf.database_id = d.database_id 
WHERE d.database_id > 4;

此查询将列出如下内容:

USE [SEDI_4649] ALTER DATABASE [SEDI_4649] SET RECOVERY SIMPLE SHRINKFILE(N'SEDI_SQL_log',0,TRUNCATEONLY)ALTER DATABASE [SEDI_4649] SET RECOVERY full < / p>

USE [SEDI_4650] ALTER DATABASE [SEDI_4650] SET RECOVERY SIMPLE SHRINKFILE(N'SEDI_SQL_dat',0,TRUNCATEONLY)ALTER DATABASE [SEDI_4650] SET RECOVERY full < / p>

我需要做的就是复制结果,然后在查询窗口中运行。

Greate,我现在所有dbs都收缩并记录。

但是......有没有办法通过工作来运行它?

我一直在尝试创建一个将结果保存在.txt文件中的proc,并且作业执行此.txt但没有成功。

感谢您的帮助。

  
    

SQL 2008

  

1 个答案:

答案 0 :(得分:0)

新工作 - &gt;步骤 - &gt;新 - &gt;粘贴您的查询...并安排

更改您的查询以使用动态sql

然后使用作业

declare @sql varchar(max)
SELECT 
set @sql = 'USE [' + d.name + N']' + CHAR(13) + CHAR(10) +  
  'ALTER DATABASE [' + d.name + N'] SET RECOVERY SIMPLE ' +
+ 'DBCC SHRINKFILE (N''' + mf.name + N''' , 0, TRUNCATEONLY)' 
+ CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) 
+ 'ALTER DATABASE [' + d.name + N'] SET RECOVERY full'
exec (@sql)
FROM 
     sys.master_files mf 
JOIN sys.databases d 
    ON mf.database_id = d.database_id 
WHERE d.database_id > 4;