我正在尝试使用动态SQL获取数据库日志名称,并将该结果传递给DBCC shrinkfile(@log, 5)
。但是日志并没有缩水。我收到查询结果,说不存在日志文件或该文件已移动。
下面的代码正在打印结果:
use master
declare @test nvarchar(255)
declare @search nvarchar(10) = 'log'
SET @test = 'select Name
from sys.database_files
where name like '''+'%' +@search+ '%' + ''''
EXECUTE sp_executesql @test
PRINT @test
但是此代码抛出错误:
use master
declare @test nvarchar(255)
declare @search nvarchar(10) = 'log'
SET @test = 'select Name
from sys.database_files
where name like '''+'%' +@search+ '%' + ''''
EXECUTE sp_executesql @test
DBCC SHRINKFILE(@test, 5)
答案 0 :(得分:1)
您需要为select的输出设置一个名称。假设有一个匹配的名称,然后尝试以下版本:
declare @sql nvarchar(255);
declare @search nvarchar(10) = 'log';
declare @name sysname;
set @sql = '
select @name=Name
from sys.database_files
where name like ''%' +@search+ '%''
'
exec sp_executesql @sql, N'@name sysname output', @name=@name output;
select @name;
在您的版本中,您将exec
的输出与print
混淆了。 print
没有任何结果。