MS-SQL서버에 여러개의 DB가 존재할 때 프로시져 컴파일을 각각의 DB에 들어가서 일일히 컴파일하기가 번거롭고,
프로시져 수정 사항이 생길 때도 각각 들어가서 컴파일 하기에 너무 시간이 많이 소요되서 각각의 DB에 일괄로 프로시져 컴파일
하도록 프로시져를 구현 하는데 막히는 부분이 있어서 이곳에 올립니다.
제가 일괄로 프로시져를 갱신하기 위한 문장을 만들고 있는데 프로시져 내용이 워낙 방대 하다 보니 아래의
SET @SQL = 'CREATE Proc dbo.sp_recv_proc........................'
부분에 @SQL = 파일로 처리하거나 프로시져를 가져올수 있는 부분이 있나해서 문의 해봅니다.
/* 변수선언 */
DECLARE @table_id int
DECLARE @DataBaseName SYSNAME
DECLARE @USE_DB NVARCHAR(300)
DECLARE @SQL NVARCHAR(1000)
DECLARE @cols int
/* 커서선언 */
DECLARE U_CURSOR CURSOR FOR
SELECT name FROM master..sysdatabases where name LIKE '%CUST'
OPEN U_CURSOR
FETCH NEXT FROM U_CURSOR
INTO @DataBaseName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @table_id = object_id(@DataBaseName+'.DBO.T_R_RECORD')
-- 테이블이 있다면 프로시져 생성
IF @table_id IS NOT NULL
BEGIN
-- 대상 데이터베이스
SET @USE_DB = 'USE ' + @DataBaseName + ' '
-- 실행시킬 쿼리문
SET @SQL = 'CREATE Proc dbo.sp_recv_proc........................'
SET @SQL = @USE_DB + @SQL
EXEC (@SQL)
FETCH NEXT FROM U_CURSOR
INTO @DataBaseName
END
-- 대상 테이블 없을 경우 프로시져 생성 안함.
ELSE
BEGIN
SELECT @DataBaseName as 데이터베이스명, '테이블 없음' AS 결과
FETCH NEXT FROM U_CURSOR
INTO @DataBaseName
END
END
CLOSE U_CURSOR
DEALLOCATE U_CURSOR
Comment 1
-
항해자™
2013.05.11 11:14
여러대의 SQL 서버에 동시에 커넥션을 맺어서 한꺼번에 처리할 수 있습니다.
등록된 서버에 동시 처리할 서버를 한 폴더에 등록하고 폴더에서 새 쿼리를 누르면 폴더에 등록 된 모든 서버에 한번에 연결됩니다.
그러면 거기서 실행하는 쿼리는 연결된 모든 서버에 동일하게 적용됩니다.