-- Number를@Num라고선언
declare @Num varchar(10)
-- UPDATE Time을@month_date 라고선언
declare @month_date datetime
-- 로봇코드명을@Robot_Name라고선언
declare @Robot_Name varchar(max)
-- 로봇의대수를@Robot_No라고선언
declare @Robot_No int
-- 테이블명을@Table_Name라고선언
declare @Table_Name varchar(max)
-- exec프로시저사용을위한함수@strQuery를선언
declare @strQuery varchar(max)
set @month_date = (select Now_Date from HRMS_Diagnostics.dbo.UPDATE_TIME where Num in(1))
set @Robot_Name = 'dbo.tbAxisLoadContinueHis_R'
Set @Num = '20'
set @Robot_No = 20
--로봇대수만큼반복문실행
while @Num <= @Robot_No
begin
set @Table_Name = @Robot_Name + RIGHT('000' + CAST(@Num AS VARCHAR), 3)
set @strQuery =
'select left (convert(VARCHAR, dtTimeStamp , 120),16),
avg(fLoadContinue_1), min(fLoadContinue_1), max(fLoadContinue_1),
avg(fLoadContinue_2), min(fLoadContinue_2), max(fLoadContinue_2),
avg(fLoadContinue_3), min(fLoadContinue_3), max(fLoadContinue_3),
avg(fLoadContinue_4), min(fLoadContinue_4), max(fLoadContinue_4),
avg(fLoadContinue_5), min(fLoadContinue_5), max(fLoadContinue_5),
avg(fLoadContinue_6), min(fLoadContinue_6), max(fLoadContinue_6),
avg(fLoadContinue_7), min(fLoadContinue_7), max(fLoadContinue_7),
avg(fLoadContinue_8), min(fLoadContinue_8), max(fLoadContinue_8),
avg(fLoadContinue_9), min(fLoadContinue_9), max(fLoadContinue_9)
from '+'HRMS_HIS.'+@Table_Name
+' where dtTimeStamp <='+@month_date
+' group by left (convert(VARCHAR, dtTimeStamp , 120), 16)'
+' order by left (convert(VARCHAR, dtTimeStamp , 120), 16)'
set @Num = @Num + 1
exec(@strQuery)
end
이라고 할때
@month_date 의 값은 2013-10-27 12:00:00 입니다.
이쿼리를 실행하면
메시지 241, 수준 16, 상태 1, 줄 30
문자열을 datetime으로 변환하지 못했습니다.
라는 오류가 뜨는데
set @strQuery = 부분에
'declare @month_date datetime
set @month_date = (select Now_Date from HRMS_Diagnostics.dbo.UPDATE_TIME where Num in(1))'
이라고 한번더 선언을 해주면 정상으로 처리가 됩니다.
제 생각에는 datetime 을 exec함수에서 재대로 변환을 못 하는거 같은데
정확한 이유와
다시 선언을 안해도 정상 처리 될 수 있는 방법좀 알고싶습니다
Comment 3
-
건우아빠
2013.11.28 11:19
-
향지
2013.11.28 11:58
건우아빠님 설명에 간단하게 추가하면
암시적 형변환시 타입 우선순위를 고려해보시고 만들어보세요
datetime이 varchar보다 우선순위가 높아서 문자열을 datetime으로 암시적 변환 하려고 했습니다.
-
바람의취객
2013.12.12 10:09
답변 감사합니다 일이있어 답변을 지금 봤습니다.
우선
from '+'HRMS_HMC.'+@Table_Name +' where dtTimeStamp <= '''+@month_date+''''
위에 쿼리 형식처럼 '' '' 를 사용하니 간단하게 해결 되었습니다.
앞으로도 많은 답변 부탁드립니다.
@month_date --> convert(varchar, @month_date, 21) 이런식으로 바꿔 보세요..
ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.ko/s10de_6tsql/html/a87d0850-c670-4720-9ad5-6f5a22343ea8.htm
데이터 형식 변환 http://valley.egloos.com/viewer/?url=http://sweeper.egloos.com/3001863