2012-02-16 40 views
3

データベースが複数あるSQL Server 2008 R2インスタンスがあります。キーワード 'current_timestamp'の近くの構文が正しくありません - ただし、1つのデータベースのみ

私は、入力として日付をとり、関連情報のテーブルを返すデータベースの1つ(DB1と呼ぶ)でテーブル値付き関数を実行しようとしています。

私のような私のクエリを実行します。

SELECT * FROM dbo.getAllStatusesForGridProjectsByMaximumDate(CURRENT_TIMESTAMP) 

ほとんどのアップに最新の情報を取得します。結果テーブルの代わりに、しかし、SQLだけでエラーを蹴る:

を:しかし奇妙な何

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

は、私は別のデータベース(DB2)にホップ、具体的にサーバーを参照しながら機能を実行する場合、それが実行されるということです

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を試みましたが、そこにはどんな種類の関数も好きではありません。

DB1で実行されていないdbo.Function(Current_Timestamp)を実行するために、私のDB2に実行された魔法はどのようなものですか?私は自分でチェックを続けようとしていますが、素敵な人々が送ることができるどんな助けも大歓迎です。

答えて

4

データベースの互換性レベルを確認します(DB1で問題が発生していた場合、またはDB1で関数を呼び出す場合は100%クリアされていません)。

問題が発生しているデータベースの互換性レベルは80ですが、 SQL Server 2000では、関数をUDFに直接渡すことはできませんでした(互換性レベルが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

関連する問題