declare @db nvarchar(4000),@str varchar(4000),@tmp1 nvarchar (500) 
,@tmp2 nvarchar (500) ,@tmp3 nvarchar (100) 
select  @str='',@tmp1='',@tmp2='@log_name nvarchar(60) output'
SELECT @db=isnull(@db+',','') + name FROM master..sysdatabases 
where name not in ('master','tempdb','model','msdb','northwind','pubs')
if @db is not null
set @db=@db+','
while (charindex(',',@db)>0)
begin
declare @name varchar(50),@log_name nvarchar(60)
set @name=left(@db,charindex(',',@db)-1)
set @tmp1='select @log_name= name from '+@name+'..sysfiles where filename like ''%ldf'''
exec SP_EXECUTESQL @tmp1,@tmp2,@log_name=@tmp3 output
select @str=@str+'use '+@name+' dbcc shrinkfile('''''+@tmp3+''''')  '
set @db=stuff(@db,1,charindex(',',@db),'')
end
--select  @str
exec @str1、exec 执行时提示 不是有效的标识符。
可是我把字符串拿出来由可以exec ,不知道是怎么回事?
2、这是我自己想出来的只收缩日志的方法,不知道有没有其他更好的方法。