2011-10-29 2 views
3

다음은 작동하지 않으며 명확한 내용이 누락되어 있지만 누군가가 왜 작동하지 않는지 설명 할 수 있으면 좋을 것입니다. db를 동적으로 변경해야합니다.왜 데이터베이스를 동적으로 변경할 수 없습니까? SQL Server 2008

인쇄가 잘되지만 SQL Server 드롭 다운에서 db가 변경되지 않습니다.

DECLARE @tempSql nvarchar(4000); 
DECLARE @FinalSQL nvarchar(4000); 
DECLARE @dbName varchar(100); 

SET @dbName = 'Pubs'; 
SET @tempSql = 'SELECT DB_NAME()'; 

SET @FinalSQL = 'USE ' + @dbName + '; EXEC sp_executesql N''' + @tempSql + ''''; 
EXEC (@FinalSQL) 
+0

SQLCMD 모드가 옵션입니까? –

답변

2

SQLCMD 모드가 (SSMS 내에서, 예를 들어),이 작업을 수행 할 수 있습니다에 대한 옵션 인 경우 :

:setvar dbname Pubs 
USE [$(dbname)] 
SELECT DB_NAME() 

또는 원래의 구문은 아주 가까이 있었다. 이 시도 :

DECLARE @db AS NVARCHAR(258); 
SET @db = QUOTENAME(N'Pubs'); 
EXEC(N'USE ' + @db + N'; EXEC(''SELECT DB_NAME();'');'); 
GO 
+0

sqlcmd.Which 내가 동적 SQL에서 할 수있는 방법이 없다는 것을 보게 될 것입니다 – user9969

+0

하지만 quotache를 사용하려고 시도했지만 차이가 없습니다. – user9969

+0

@ user231465 - 작동하지만 동적 SQL 배치가 즉시 재설정됩니다. 종료하므로 동적 SQL 자체 내에서 실행되도록 코드를 호출하거나 코드를 인라인해야합니다. –

1

이 구문을 사용하여 특정 데이터베이스에서 데이터를 액세스하는 방법이있다 : 때마다

FROM DatabaseName..TableName 

어쩌면 당신이 스크립트에서 동적 데이터베이스 이름을 사용한다을 다음으로 변경 그렇지 않으면

필요, 이것 좀보세요 : http://www.sqlteam.com/article/selecting-data-from-different-databases

1

동적 SQL은 자신의 범위에서 이루어집니다 실행.

그래서 동적 SQL의 범위 내에서만 현재 데이터베이스를 변경합니다.

관련 문제