아래와 같이 SP작성하면...SP작성이 됩니다.
그런데 저런경우가 발생하면 CATCH를 태우고 싶은데
TRY에 테이블명 오입력의 경우는 CATCH를 타지를 못하는데 타게 할수 있는 방법이 없나요?
CREATE PROC TestSP
BEGIN TRY
SELECT * FROM 잘못된테이블명
END TRY
BEGIN CATCH
--오류처리구문
END CATCH
GO
Comment 5
-
건우아빠
2013.06.14 16:42
-
건우아빠
2013.06.14 16:50
ㅎㅎ sp는 만들어지네요.
이 부분은 미쳐 생각안해 봤는데.... 잘못된 테이블을 기술해도 sp는 만들어지네여...
-
MSDN에서 "지연된 이름 확인"을 검색해보면 나옵니다.
SP를 만들당시에는 구문확인만 하기 때문에 없는 테이블 이름으로도 만들어지죠.
하지만 테이블은 있는데 컬럼이 없는 경우는 안됩니다.
-
쓸만한게없네(윤선식)
2013.06.14 17:28
이걸 집어 넣으심이...
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'dbo.테이블명') AND type in (N'U'))
BEGIN
-- 1차 오류 처리
END
-
철스
2013.06.14 17:29
IF OBJECT_ID(N'TestDB.dbo.TestTbl', N'U') IS NULL
PRINT '오류처리구문'
ELSE
SELECT * FROM TestDB.dbo.TestTbl WITH (NOLOCK)
SELECT * FROM 잘못된테이블명 이자체가 구문오류라 일단 sp가 만들어지지가 않게될듯 합니다..
이 경우는 동적 쿼리를 이용해서 실행하면 오류가 발생하여 try구문을 타게 됩니다.
try문을 타게 할려면 일단 컴파일오류(구문오류) 가 아닌 런타임오류가 발생 해야 할듯 합니다. 맞나?
declare @sql varchar(255)
set @sql = 'SELECT * FROM 잘못된테이블명' ;
BEGIN TRY
exec(@sql)
END TRY
BEGIN CATCH
print 'dddd'
END CATCH
GO