Solución:
Puede hacer esto anidando dos veces las declaraciones SQL dinámicas y luego:
begin tran
declare @sql nvarchar(max) =
N'use [AdventureWorks2012];
exec (''create view Test as select * from sys.databases'')';
exec (@sql);
select * from AdventureWorks2012.sys.views
where name="Test"
rollback tran
En lugar del anidamiento doble, otro enfoque es crear un procedimiento almacenado cuyo único propósito es ejecutar SQL dinámico
CREATE PROCEDURE [dbo].[util_CreateViewWithDynamicSQL]
@sql nvarchar(max)
AS
BEGIN
SET NOCOUNT ON;
EXECUTE (@sql)
END
El procedimiento almacenado anterior se puede reutilizar. Siempre que necesite crear una vista, simplemente llame al procedimiento almacenado y páselo al sql dinámico.
EXECUTE util_CreateViewWithDynamicSQL 'create view Test as select * from sys.databases'
Prefiero este enfoque porque el sql dinámico es lo suficientemente confuso y agregar doble anidación lo complica aún más.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)