링크드 서버가 아닌 해당 데이터베이스 내에서의 인스턴스 존재 유무, 테이블 존재 유무 확인은
DB인스턴스의 경우 SYS.SYSDATABASES 에서 조회
테이블의 경우 [DB].DBO.SYSOBJECTS / [DB].INFORMATION_SCHEMA.TABLES 에서 조회 하여 확인이 가능합니다.
EX)
IF EXISTS (SELECT * FROM SYS.SYSDATABASES WHERE NAME = 'TEST')
PRINT 'EXISTS'
ELSE
PRINT 'NOT EXISTS'
IF EXISTS (SELECT * FROM TEST.DBO.SYSOBJECTS WHERE NAME = 'TEST' AND TYPE ='U')
PRINT 'EXISTS'
ELSE
PRINT 'NOT EXISTS'
IF EXISTS (SELECT * FROM TEST.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'TEST')
PRINT 'EXISTS'
ELSE
PRINT 'NOT EXISTS'
하지만 링크드서버(원격서버)의 DB인스턴스, 테이블 존재 유무 판단을 하기위해서는 다른 방법을 사용해야합니다.
특히 인스턴스가 없는경우에는 쿼리로 확인이 안됩니다.
이때는 확인을 위한 별도 SP를 생성하고 해당 SP내에서 TRY CATCH를 통해 판단이 가능합니다.
SP
ALTER PROC SP_DB_TBL_EXISTS @SERVER_PATH VARCHAR(100), @DB VARCHAR(200), @TABLE VARCHAR(200) AS BEGIN DECLARE @Q VARCHAR(MAX) BEGIN TRY SET @Q = ' IF NOT EXISTS (SELECT * FROM OPENQUERY('+@SERVER_PATH+',''SELECT * FROM SYS.SYSDATABASES WHERE NAME = '''''+@DB+''''''')) BEGIN SELECT 0 END ELSE BEGIN IF NOT EXISTS (SELECT * FROM OPENQUERY('+@SERVER_PATH+',''SELECT * FROM '+@DB+'.DBO.SYSOBJECTS WHERE NAME = '''''+@TABLE+''''' AND TYPE = ''''U'''''')) SELECT 0 ELSE SELECT 1 END ' EXEC (@Q) END TRY BEGIN CATCH SELECT 0 END CATCH END |
위 SP를 통해 아래와 같이 출력되는 값을 확인하여 분기 처리 가능합니다.
How to check linked server db instance or table existants check?
Make test sp and check trough that procedure.
관련문의사항은 연락주세요. 감사합니다.
링크드 서버가 아닌 해당 데이터베이스 내에서의 인스턴스 존재 유무, 테이블 존재 유무 확인은
DB인스턴스의 경우 SYS.SYSDATABASES 에서 조회
테이블의 경우 [DB].DBO.SYSOBJECTS / [DB].INFORMATION_SCHEMA.TABLES 에서 조회 하여 확인이 가능합니다.
EX)
IF EXISTS (SELECT * FROM SYS.SYSDATABASES WHERE NAME = 'TEST')
PRINT 'EXISTS'
ELSE
PRINT 'NOT EXISTS'
IF EXISTS (SELECT * FROM TEST.DBO.SYSOBJECTS WHERE NAME = 'TEST' AND TYPE ='U')
PRINT 'EXISTS'
ELSE
PRINT 'NOT EXISTS'
IF EXISTS (SELECT * FROM TEST.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'TEST')
PRINT 'EXISTS'
ELSE
PRINT 'NOT EXISTS'
하지만 링크드서버(원격서버)의 DB인스턴스, 테이블 존재 유무 판단을 하기위해서는 다른 방법을 사용해야합니다.
특히 인스턴스가 없는경우에는 쿼리로 확인이 안됩니다.
이때는 확인을 위한 별도 SP를 생성하고 해당 SP내에서 TRY CATCH를 통해 판단이 가능합니다.
SP
ALTER PROC FN_DB_TBL_EXISTS @SERVER_PATH VARCHAR(100), @DB VARCHAR(200), @TABLE VARCHAR(200) AS BEGIN DECLARE @Q VARCHAR(MAX) BEGIN TRY SET @Q = ' IF NOT EXISTS (SELECT * FROM OPENQUERY('+@SERVER_PATH+',''SELECT * FROM SYS.SYSDATABASES WHERE NAME = '''''+@DB+''''''')) BEGIN SELECT 0 END ELSE BEGIN IF NOT EXISTS (SELECT * FROM OPENQUERY('+@SERVER_PATH+',''SELECT * FROM '+@DB+'.DBO.SYSOBJECTS WHERE NAME = '''''+@TABLE+''''' AND TYPE = ''''U'''''')) SELECT 0 ELSE SELECT 1 END ' EXEC (@Q) END TRY BEGIN CATCH SELECT 0 END CATCH END |
위 SP를 통해 아래와 같이 출력되는 값을 확인하여 분기 처리 가능합니다.
How to check linked server db instance or table existants check?
Make test sp and check trough that procedure.
'프로그래밍 > TSQL' 카테고리의 다른 글
[TSQL]"엄청 빠른 ROW COUNT" COUNT(*) 는 너무 느려 SYS.DM_DB_PARTITION_STATS 을 써보자 (0) | 2023.04.11 |
---|---|
[MSSQL] bcp 중에 QUOTED_IDENTIFIER 관련 오류 발생 해결 방법 (0) | 2022.08.11 |
[MSSQL] How to compute the modulus of a float in TSQL? (0) | 2022.07.27 |
[MSSQL]운영체제 오류 5 (엑세스라 거부되었습니다.) restore fail (0) | 2022.05.27 |
[MSSQL]서비스 재시작(w.에이전트 재시작) (0) | 2022.05.11 |
댓글