Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用查询结果创建作业(Sql 2008)_Sql Server_Sql Server 2008_Jobs_Proc - Fatal编程技术网

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

Sql server 使用查询结果创建作业(Sql 2008),sql-server,sql-server-2008,jobs,proc,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) + CH

早上好,朋友们

有没有办法用这个查询的结果集来运行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;
此查询将列出如下内容:

使用[SEDI_4649]ALTER DATABASE[SEDI_4649]设置恢复简单DBCC收缩文件N'SEDI_SQL_log',0,截断仅更改数据库[SEDI_4649]设置完全恢复

使用[SEDI_4650]ALTER DATABASE[SEDI_4650]设置恢复简单DBCC收缩文件N'SEDI_SQL_dat',0,截断仅更改数据库[SEDI_4650]设置恢复完全

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

Greate,我现在所有的dbs都缩小了,并记录了日志

但是…有没有办法通过作业来运行此功能

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

谢谢你的帮助

SQL 2008


新建作业->步骤->新建->粘贴查询。。。并安排它


将查询更改为使用动态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;

只需创建proc并将其粘贴到查询和调度上即可。这就是我想做的。但我认为它只会返回结果集,而不会执行列表。但我知道,明天我会测试。谢谢将查询更改为使用动态sql,然后使用作业