Microsoft SQL Server 2008 R2 SP1(서비스 팩 1) 수정 프로그램을 하나의 다운로드 가능한 파일로 배포 합니다. 수정 프로그램이 누적 되므로 새 릴리스에는 이전 SQL Server 2008 R2 SP1(서비스 팩 1) 수정 릴리스에 포함 된 모든 핫픽스와 모든 보안 수정 사항이 포함 되어 있습니다.
증상
다음과 같은 경우를 생각해 볼 수 있습니다.
-
Microsoft SQL Server 2008 R2 또는 Microsoft SQL Server 2012의 표에 datetimeoffset 데이터 형식 열이 있습니다.
-
Datetimeoffset 열에서 인덱스를 만듭니다.
-
CAST 또는 convert 함수를 style 인수 없이 사용 하거나 style 인수의 값이 0인 경우 datetimeoffset 데이터 형식을 smalldatetime 데이터 형식으로 변환할 수 있습니다.
-
CAST 또는 CONVERT 함수의 결과는 transact-sql 쿼리의 필터에 사용 됩니다.
-
T-sql 쿼리를 실행 합니다.
이 시나리오에서는 필터가 올바르게 작동 하지 않으므로 쿼리에서 반환 하는 결과가 올바르지 않습니다. 예를 들어 "Date" 라는 datetimeoffset 열에는 다음 값이 포함 되어 있다고 가정 합니다.
-
2011-05-21 23:00:00 -01:00
-
2011-05-21 23:00:00 +00:00
-
2011-05-21 23:00:00 +01:00
다음 쿼리를 실행 합니다.
SELECT Date FROM TestTable WHERE CAST(Date AS smalldatetime)= '2011-05-21 23:00:00'
쿼리 결과는 행을 하나만 반환 합니다. 그러나 예상 결과는 세 값 모두에 대해 행을 반환 해야 합니다.
해결 방법
누적 업데이트 정보
SQL Server 2012
이 문제에 대 한 픽스는 SQL Server 2012의 누적 업데이트 3에서 처음 릴리스 되었습니다. 이 누적 업데이트 패키지에 대 한 자세한 내용은 다음 문서 번호를 클릭 하 여 Microsoft 기술 자료 문서를 참조 하세요.
2723749 SQL Server 2012의 누적 업데이트 패키지 3참고 빌드가 누적 되므로 새로운 각 수정 릴리스에는 이전 SQL Server 2012 fix 릴리스에 포함 된 모든 핫픽스와 모든 보안 수정 사항이 포함 되어 있습니다. 이 핫픽스를 포함 하는 최신 픽스 릴리스를 적용 하는 것이 좋습니다. 자세한 내용을 확인하려면 다음 문서 번호를 클릭하여 Microsoft 기술 자료 문서를 참조하십시오.
2692828 SQL Server 2012이 출시 된 이후 출시 된 SQL Server 2012 빌드 Sql server 2012 설치에 SQL Server 2012 핫픽스를 적용 해야 합니다.
SQL Server 2008 R2 서비스 팩 2
이 문제에 대 한 픽스는 SQL Server 2008 R2 서비스 팩 2에 대 한 누적 업데이트 1에서 처음 릴리스 되었습니다. 이 누적 업데이트 패키지를 구하는 방법에 대 한 자세한 내용은 다음 문서 번호를 클릭 하 여 Microsoft 기술 자료 문서를 참조 하세요.
2720425 SQL Server 2008 R2 서비스 팩 2 용 누적 업데이트 패키지 1참고 빌드가 누적 되므로 새로운 각 수정 릴리스에는 이전 SQL Server 2008 R2 fix 릴리스에 포함 된 모든 핫픽스와 모든 보안 수정 사항이 포함 되어 있습니다. 이 핫픽스를 포함 하는 최신 픽스 릴리스를 적용 하는 것이 좋습니다. 자세한 내용을 확인하려면 다음 문서 번호를 클릭하여 Microsoft 기술 자료 문서를 참조하십시오.
2730301 SQL Server 2008 R2 서비스 팩 2 이후 릴리스된 SQL Server 2008 R2 빌드가 릴리스 되었습니다.
SQL Server 2008 R2 SP1
이 문제에 대 한 픽스는 먼저 누적 업데이트 7에서 릴리스 되었습니다. SQL Server 2008 R2 서비스 팩 1 용 누적 업데이트 패키지를 구하는 방법에 대 한 자세한 내용은 다음 문서 번호를 클릭 하 여 Microsoft 기술 자료 문서를 참조 하세요.
2703282 SQL Server 2008 R2 SP1 용 누적 업데이트 패키지 7참고 빌드가 누적 되므로 새로운 각 수정 릴리스에는 이전 SQL Server 2008 R2 서비스 팩 1 해결 릴리스에 포함 된 모든 핫픽스와 모든 보안 수정 사항이 포함 되어 있습니다. 이 핫픽스를 포함 하는 최신 픽스 릴리스를 적용 하는 것이 좋습니다. 자세한 내용을 확인하려면 다음 문서 번호를 클릭하여 Microsoft 기술 자료 문서를 참조하십시오.
2567616 SQL Server 2008 R2 SP1 이후 릴리스된 SQL Server 2008 R2 빌드가 릴리스 되었습니다.
추가 정보
문제를 재현 하려면 다음 단계를 따르세요.
-
Datetimeoffset 열을 사용 하 여 테이블을 만들고 일부 레코드를 삽입 하려면 다음 쿼리를 실행 합니다.CREATE TABLE #TestTimeZones (dto datetimeoffset(0)); GO INSERT INTO #TestTimeZones(dto) VALUES ('2011-05-21 23:00:00 -01:00'), ('2011-05-21 23:00:00 +00:00'), ('2011-05-21 23:00:00 +01:00'); GO
-
다음 쿼리를 실행 하면 반환 되는 결과에 세 값이 모두 올바르게 나열 됨을 확인할 수 있습니다.DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withoutIndex FROM #TestTimeZones WHERE CAST(dto AS smalldatetime)=@t;
-
"Dto" 열에 대 한 인덱스를 만들고 동일한 쿼리를 반복 하려면 다음 쿼리를 실행 합니다.CREATE INDEX IX_testTimeZones_Dto ON #TestTimeZones(dto); GO -- Repeat the same query DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withIndex FROM #TestTimeZones WHERE CAST(dto A smalldatetime)=@t; GO
-
2 단계에서 쿼리를 다시 실행 합니다. 이번에는 쿼리는 행을 하나만 반환 합니다.
-
다음 쿼리를 실행 하 여 인덱스와 만든 테이블을 삭제 합니다.DROP INDEX IX_testTimeZones_Dto ON #TestTimeZones; GO DROP TALBE #TestTimeZones; GO
참조
CAST 및 CONVERT 함수에 대 한 자세한 내용은 다음 MSDN 웹 사이트를 참조 하세요.
상태
Microsoft는 "적용 대상" 절에 나열한 제품에서 이 문제를 확인했습니다.