나름 간단하다고 생각한 쿼리를 만들고 있습니다.
로컬 DB의 테이블의 Max ID와 Remote DB의 Max ID 값을 구하는 것입니다. (그 두개를 비교하여, 결과에 따라 다른 액션을 취하는 것은 다음 단계이구요...ㅠ.ㅠ).. 아래와 같이 쿼리를 꾸며 보았습니다.
DECLARE @DHeader varchar(10) = 'tbl_evt_';
DECLARE @TodayIs varchar(8) = convert(char(8),getdate(),112)
DECLARE @TotDate1 varchar(18) = @DHeader + @TodayIs;
DECLARE @Tot_TblName Varchar (300)
DECLARE @MaxLocal int;
DECLARE @MaxRemote int;
Select @MaxLocal = Max(EvtID) from dbo.tbl_Evt_Master where CONVERT (DATE, packet_time,120)= @TodayIs
Select @MaxLocal
위와 같이 하면, @MaxLocal 변수에 값이 잘 들어옵니다. 그런데....ㅠ.ㅠ
Select @MaxRemote = Max(EvtID) from LK_RemoteDB...@TotDate1
Select @MaxRemote
위와 같이 하면, @MaxRemote 변수에 값이 안 들어오고, 아래와 같은 에러가 나옵니다. ..ㅠ.ㅠ
Incorrect syntax near '@TotDate1'.
즉, 로컬 DB의 Select 문 이하는 실행의 의미로서, 변수가 있어도 인식을 하는데... Linked 서버로 연결한 remote 테이블의 경우에는
Select @MaxRemote 뒤의 실행문을 마치 문자열로 인식하는 듯한 에러인것 같습니다.
어디가 틀린 걸까요? 좀 가르쳐 주세요! ㅠ.ㅠ
테이블명 같은 것을 변수로 사용 하고 싶을 때는 일단 동적 쿼리로 만드셔야 합니다.
sp_executesql 동적 쿼리로 실행 하신게 맞는지 궁금하네요..
링크드 서버의 경우에서 테스트 해보진 않았지만 비슷한 질문에 대해 답변이 있는 걸로 보아 가능해 보입니다.
아래 사이트 참고 해보세요.
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=106883