문제

변수에서 데이터베이스를 선택하는 방법이 있습니까?

Declare @bob as varchar(50);
Set @bob = 'SweetDB';
GO
USE @bob
도움이 되었습니까?

해결책

불행하게도.

나머지 배치를 동적 SQL로 실행할 수 없다면.

사용 execute SQL을 동적으로 실행하려면의 범위에 대한 컨텍스트가 변경됩니다. execute 진술이지만 실행하는 범위에 지속적인 영향을 미치지 않습니다. execute 진술.

다시 말해, 이것은 :

DECLARE @db VARCHAR(100)
SET @db = 'SweetDB'
EXECUTE('use ' + @db)

현재 데이터베이스를 영구적으로 설정하지는 않지만 위의 코드를 다음과 같이 변경 한 경우 다음과 같습니다.

DECLARE @db VARCHAR(100)
SET @db = 'SweetDB'
EXECUTE('use ' + @db + ';select * from sysobjects')
select * from sysobjects

그러면이 두 쿼리의 결과는 다르고 (SweetDB에 아직 없다고 가정) 첫 번째 선택이 내부에서 실행되었습니다. execute sweetdb에서 실행 중이지만 두 번째는 그렇지 않습니다.

다른 팁

declare @NewDB varchar(50)
set @NewDB = 'NewDB'
execute('use ' + @NewDB)

#Temptables는 GOS 전역에 전달됩니다

첫 번째 배치에서 테이블을 만들고, 다음 배치 또는 다음 배치에 필요한대로 데이터를 삽입/선택할 수 있습니다.

다음은 샘플 구문입니다.

CREATE TABLE #YourTableName
(
     col1   int         not null   primary key   identity(1,1)
    ,col2   varchar(10)
)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top