변수에서 데이터베이스를 선택하는 방법이 있습니까?
-
06-09-2019 - |
문제
변수에서 데이터베이스를 선택하는 방법이 있습니까?
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)
)
제휴하지 않습니다 StackOverflow