Есть ли способ сохранить результаты динамического SQL в переменной? Это очень популярный вопрос, давайте посмотрим ответ на этот вопрос в этом блоге.
Например, вот динамический SQL, который мы выполняем с помощью sp_executeSQL. Когда вы запускаете процедуру, вы получаете необходимые результаты. В нашем случае мы видим строку результата как Маркетинг, который является названием отдела с ID = 13.
DECLARE @sqlCommand NVARCHAR(4000) DECLARE @ID INT SET @ID = 13 SET @sqlCommand = 'SELECT [Name] FROM [AndreyExWorks2018].[HumanResources].[Department] WHERE DepartmentID = @ID' EXEC sp_executesql @sqlCommand, N'@ID INT', @ID = @ID
Теперь возникает вопрос, как получить значение столбца [Name] в переменной.
Вот очень простой трюк для того же самого. Вот скрипт, который объявляет дополнительный параметр, который является Name и возвращает значение в него.
DECLARE @sqlCommand NVARCHAR(4000) DECLARE @ID INT DECLARE @Name NVARCHAR(100) SET @ID = 13 SET @sqlCommand = 'SELECT @Name = [Name] FROM [AndreyExWorks2018].[HumanResources].[Department] WHERE DepartmentID = @ID' EXEC sp_executesql @sqlCommand, N'@ID INT, @Name NVARCHAR(100) OUTPUT', @ID = @ID, @Name = @Name OUTPUT SELECT @Name ReturnedName
Вы можете использовать этот сценарий и пример в качестве шаблона для своей потребности, где вы хотите запустить динамический SQL и сохранить результат его в переменной.
Если у вас есть такой сценарий, мы просим вас поделиться им, и мы опубликуем его с должным уважением к вам. Всегда используйте sp_executesql вместо EXEC для запуска динамического SQL.