Как передать результат динамического SQL в команды DBCC в качестве параметра? - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь получить имя журнала базы данных, используя динамический 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)

1 Ответ

0 голосов
/ 26 ноября 2018

Вам необходимо установить имя для выхода выбора.Предполагая, что есть одно имя, которое соответствует, попробуйте эту версию:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...