2013-07-02 4 views
0

다음 상황이 있습니다.저장 프로 시저의 다른 데이터베이스

저장 프로 시저의 입력 매개 변수는 데이터베이스 이름입니다. 그래서,이 매개 변수 쿼리에 따라 달라집니다 다른 데이터베이스에서 실행됩니다. 모든 쿼리는 동일하며, 아래는 간단한 예입니다.

IF ... ELSE 문을 피하기 위해 동적 SQL을 사용하는 것을 제외하고는 저장 프로 시저를 작성하는 방법. 동적 SQL 외에 다른 방법이

ALTER PROCEDURE [dbo].[usp_Item_GetAll] 
(
    @DBName nvarchar(255) = '' 
) 
AS 
BEGIN 

IF @DBName = 'ItemUsers' 
BEGIN 
    SELECT 
    * 
    FROM ItemUsers.dbo.vW_DAM_ItemWithAttribute 
END 

ELSE IF @DBName = 'CollectionUsers' 
BEGIN 
    SELECT 
     * 
    FROM CollectionUsers.dbo.vW_DAM_ItemWithAttribute 
END 
+1

같은 EXEC 명령 뭔가를 사용하여 해당 쿼리를 실행하는 문자열을 만들 수 있습니다 그리고 여기서 한 일. – liebs19

답변

0

당신은 데이터베이스 이름과 함께 동적 쿼리를 포함하고 나는 생각하지 않는다이

ALTER PROCEDURE [dbo].[usp_Item_GetAll] 
(
    @DBName nvarchar(255) = '' 
) 
AS 
BEGIN 

DECLARE @SQL varchar(MAX) 
SET @SQL='SELECT * FROM ['[email protected]+'].dbo.[vW_DAM_ItemWithAttribute]' 
EXEC(@SQL) 
END 
+2

대괄호를 수동으로 넣는 대신'QUOTENAME()'을 사용합니다. –