SSMS는 반복 하지 않으며 동적 SQL에서 실행되는 사용 명령의 컨텍스트로 전환 하지 않습니다 .
최종 목표가 선택한 데이터베이스 내에서 다른 동적 SQL을 실행하는 것이라면 다음과 같이 쉽습니다.
DECLARE @db sysname = N'db1';
DECLARE @exec nvarchar(max) = QUOTENAME(@db) + N'.sys.sp_executesql',
@sql nvarchar(max) = N'SELECT DB_NAME();';
EXEC @exec @sql;
매개 변수를 전달해야하는 경우 문제가 없습니다.
DECLARE @db sysname = N'db1', @i int = 1;
DECLARE @exec nvarchar(max) = QUOTENAME(@db) + N'.sys.sp_executesql',
@sql nvarchar(max) = N'SELECT DB_NAME(), @i;';
EXEC @exec @sql, N'@i int', @i;
선택한 데이터베이스 내에서 일부 정적 SQL 을 실행하는 것이 목표라면 각 데이터베이스의 스토어드 프로 시저에 해당 정적 SQL을 저장하고 다음과 같이 동적으로 호출하는 것을 고려해야합니다.
DECLARE @db sysname = N'db1';
DECLARE @exec nvarchar(max) = QUOTENAME(@db) + N'.sys.sp_executesql',
@sql nvarchar(max) = N'EXEC dbo.procedurename;';
EXEC @exec @sql;
그리고 궁극적으로 최종 목표는 SSMS 에서이 코드를 모두 실행하지 않는 것입니다 .SSMS가 지금의 맥락에 있습니다 @db
... Daniel은 @Lothar의 의견에서도 언급했듯이 이것이 불가능하다는 것을 명시 적으로 밝히면 정말 좋아합니다.