2010-06-06 5 views
0

내 데이터베이스에는 약 30 개의보기가 있으며, 대부분이 서버의 다른 데이터베이스에 대한 참조를 가지고 있습니다 (DB1).뷰를 일괄 업데이트하는 방법은 무엇입니까?

지금, 그 이유에 가지 않고 왜, 나는 또한 로컬 서버에 DB2에 모든 뷰를 업데이트해야합니다.

나는 각 뷰에 수동으로 수행해야 할 싫어. 내 모든보기에서 'DB2'문자열 'DB1'의 모든 항목을 대체 할 실행할 수있는 일부 SQL 쿼리가 있습니까?

답변

3

오른쪽 창에서 F7 (개체 탐색기 세부 정보)을 눌러 원하는보기를 모두 선택하고 오른쪽 클릭 -> 스크립트보기 ->DROP and CREATE TO -> 새 쿼리 창을 클릭하십시오. DB2 및 짜잔에이 변경 DB1에서

볼 이미지 alt text

+0

내가 어쩌면 더 나은 선택이 될 것보기를 변경하려면보기를 CREATE 변화하지만, 다시 많은 사람들이 DBO 권리를주고, 너무 그것에 대해 생각했다 – gbn

+1

... 스크립팅 옵션 권한을 포함하고 확인하는 것을 잊지 마세요 사용자 :-( – SQLMenace

4

당신은 실행할 수있는 (SSMS 결과를 자릅니다) 내가 BCP를 통해 파일을 생성하는 데 사용할 것 같은 sys.sql_modules를 조회 할 수 있습니다 다른 SQL 스크립트로. 이렇게하면 사용 권한도 보존됩니다.

나는 전에이 기술을 사용했습니다 그것은 작동합니다.

SELECT 
    REPLACE (REPLACE (sm.definition, 'CREATE VIEW', 'ALTER VIEW'), 'DB1.', 'DB2.') + ' 
    GO' 
FROM 
    sys.sql_modules sm 
    JOIN 
    sys.objects o ON sm.object_id = o.object_id 
WHERE 
    sm.definition LIKE '%DB1.%' AND o.type = 'V' 
관련 문제