2012-06-28 3 views
0

SQL에서 다음 코드를 수행합니다. 인쇄 섹션이 실행되면 'Dec 31 2050 11:59 PM'이 반환됩니다. 나는 코드의 나머지 부분에서 변수를 사용하고 (표시되지 않음) 작동하지 않으며 "문자열을 smalldatetime 데이터 유형으로 변환 할 때 변환이 실패했습니다"라는 오류가 발생합니다.datetime 변수 설정

형식을 혼동 시켰습니까? 나는 datetime이 'yyyy-mm-dd hh : mm : ss'로 끝났다고 생각했지만 분명히 틀림없이 틀렸다. datetim 형식을 보는 모든 곳에서 이것이 작동해야한다고 말합니다. 그래서 내가 뭘 잘못하고 있는지 모르겠습니다.

 declare @date int 

[email protected] is yyyymm format 


declare @sql_v_fx as varchar(max), @sql_dim_for_exc as varchar(max) 
declare @maxEndDate as smalldatetime 

set @date = 201202 
set @maxEndDate = Convert(smalldatetime, '2050-12-31 23:59', 101) 

print @maxenddate 

--remove prior date in [zstbl_fx_rollback] 
truncate table zstbl_fx_rollback 

--insert the user entered month 
--specify in the VS report whether it's Balance Sheet or Income Statement date 
insert into [zstbl_fx_rollback] (yyyymm) select @date 

--alter the v_fx view to into account the date in the [zstbl_fx_rollback] table 
select @sql_v_fx = 
' 
    Alter view [dbo].[v_fx] as 
    select 
      [foreign exchange key],[currency key], [to usd], [from usd], [effective date], 
      [expiration date] = 
       case when [effective date] = 
         convert(datetime,cast((select isnull(max(yyyymm),205012) from zstbl_fx_rollback) * 100 + 1 as char(8))) then ' + @maxEndDate + ' else [expiration date] end 
      ,[is current] 
      ,[effective date key] = year([effective date]) * 10000 + month([effective date])*100 

    from crs..[dim foreign exchange] 
    where [effective date] <= convert(datetime,cast((select isnull(max(yyyymm),205012) from zstbl_fx_rollback) * 100 + 1 as char(8))) 
' 

exec(@sql_v_fx) 
+0

을 확인? 나는이 코드에 아무런 문제가 보이지 않는다. – Sean

+0

예이 코드는 작동해야합니다.이 오류가 발생한 곳의 코드를 게시 할 수 있습니까? 내가 이것을 실행하고 나는 어떤 에러도 내지 않는다. 'SELECT 1 WHERE @maxEndDate> GETDATE()','SELECT 1 WHERE CAST (@maxEndDate as smalldatetime)> GETDATE()' –

+0

이것을 할 수 없다. '2050-12-31 23:59:00'* 10000> GETDATE()'varchar 날짜 문자열에 10000을 곱하십시오. –

답변

0

이 당신이 날짜의 또 다른 형식을 필요로하는 경우 Sql-Server

set @maxEndDate = Convert(smalldatetime, '2050-12-31 23:59', 101) 

을 시도 할 경우,이 링크 변환 오류 코드를 생성하는 어떤 http://msdn.microsoft.com/es-es/library/ms187928.aspx

+0

@maxEndDate를 인쇄 할 때 여전히 ''12 월 31 일 2050 11:59 PM' –

+0

은 maxEndDate를 사용하는 장소를 표시하고 오류를 표시합니다. 문제는 형식이 아닙니다. SQL에서 날짜를 표시하는 방식 일 뿐이 기 때문입니다. 데이터 유형에 문제가 있습니다. 캐스트가 누락 되었습니까? 오류가 생겼을 때 우리에게 쿼리를 보여주십시오 –

+0

사과드립니다. 원래 게시물을 업데이트했습니다. FYI와 마찬가지로 코드를 문자열로 설정하는 이유는 저장 프로 시저를 사용하여 뷰를 업데이트하는 것이므로 작동시킬 수있는 유일한 방법입니다. 그리고 문자열에는 틱 마크와 더하기 기호에 문제가 있으므로 매우 쉽게해야하는 것이 막대한 악몽이되었습니다. –