2012-02-16 4 views
3

데이터베이스가 여러 개인 SQL Server 2008 R2 인스턴스가 있습니다.'current_timestamp'키워드 근처의 구문이 올바르지 않습니다. 단 하나의 데이터베이스에만 해당

나는 하나의 데이터베이스 (DB1이라고 부름)에서 테이블 반환 함수를 실행하여 날짜를 입력으로 가져 와서 관련 정보의 테이블을 반환하려고합니다.

나는 같은 내 쿼리를 실행 :

SELECT * FROM dbo.getAllStatusesForGridProjectsByMaximumDate(CURRENT_TIMESTAMP) 

이 가장-에 대한 최신 정보를 얻을 수 있습니다.

Msg 156, Level 15, State 1, Line 1 
Incorrect syntax near the keyword 'CURRENT_TIMESTAMP'. 

무엇하지만 이상한 것은 특히 서버를 참조하는 동안이 기능을 다른 데이터베이스 (DB2)에 힙합과 실행하면 실행한다는 것입니다 :

대신 결과 테이블의, 그러나, SQL은 오류 차기
USE DB2 
GO 

SELECT * FROM DB1.dbo.getAllStatusesForGridProjectsByMaximumDate(CURRENT_TIMESTAMP) 

결과가 반환됩니다.

USE DB1 
GO 

SELECT * FROM DB1.dbo.getAllStatusesForGridProjectsByMaximumDate(CURRENT_TIMESTAMP) 

Msg 156, Level 15, State 1, Line 1 
Incorrect syntax near the keyword 'CURRENT_TIMESTAMP'. 

내가 놓친 설정 또는 재산의 어떤 종류가 있는지 확인하기 위해 데이터베이스를 검토 한 결과 : 나는 시도하고 DB1의 오프 쿼리를 실행하면,하지만, 그 같은 잘못된 구문 오류가 다시 개막 내 테이블 반환 함수에 CURRENT_TIMESTAMP를 전달할 수 있었고 아무 것도 찾지 못했습니다. CURRENT_TIMESTAMP의 CAST/CONVERT를 명시 적으로 시도했지만 거기에는 어떤 종류의 함수도 마음에 들지 않습니다.

내 DB2에서 DB1에서 수행되지 않은 dbo.Function (Current_Timestamp)을 실행할 수있게 해주는 요술이 무엇입니까? 나는 내 자신을 계속 점검 할 것이지만 훌륭한 사람들이 보낼 수있는 도움은 크게 감사 할 것입니다.

답변

4

데이터베이스의 호환성 수준을 확인하십시오 (DB1에서 문제가 발생했거나 DB1에서 함수를 호출 한 경우 100 % 명확하지 않음).

문제가있는 데이터베이스의 호환성 수준은 80입니다. SQL Server 2000에서는 함수가 UDF에 직접 전달되는 것을 허용하지 않았습니다. compat 수준이 80 인 경우 동적 관리 함수 중 일부를 호출하는 것과 동일한 문제가 있습니다 (this blog post and the comments 참조). 당신이 < 100 찾아내는 경우에 당신이 할 수있는,

SELECT name, compatibility_level FROM sys.databases WHERE name = 'DB1'; 

:이 데이터베이스는 백업 또는 2000에서 또는 당신은 현재 호환성이 방법을 확인할 수 있습니다 2000에서 업그레이드 한 후 분리 된 후 복원 또는 부착되어 있어야합니다 말 :

ALTER DATABASE DB1 SET COMPATIBILITY_LEVEL = 100; 

그러나 당신이 낮은 comptibility가 다른 이유로 필요하지 않은 것을 알고있는 경우에만 그렇게해야 - 당신은 새의 compat 수준에서 예상대로 데이터베이스가 작동하는 테스트 시스템에서 확인해야합니다. 문제가 있으면 언제든지 다시 변경할 수 있지만 준비하는 것이 좋습니다.

호환성 수준을 엉망으로 만들고 싶지 않다면 로직을 약간 변경할 수 있습니다.

DECLARE @now DATETIME = CURRENT_TIMESTAMP; 
SELECT * FROM dbo.getAllStatusesForGridProjectsByMaximumDate(@now); 
+0

그래서 ... 어 ... 우리는 지금 가장 친한 친구가 될 수 있습니까? – RockiesMagicNumber

+0

물론. 또는 다른 사람이 같은 문제로 고생하는 것을 보았을 때 지불하십시오. :-) –

+0

심각하게도 DBA 역할 (소기업, 모두들 이야기를 들었습니다.)에 빠지기 때문에 다른 것들이 깨지면이 모든 것을 배워야합니다.호환성 수준은 DB1이 80이고 DB2가 90 이었기 때문에 필자가 필요로하는 수준이었습니다. 호환성 수준을 더 연구하여 방금 한 내용을 이해하게되었습니다. 매우 감사합니다. 입력. – RockiesMagicNumber

관련 문제