1

SQL Server とキャッシュ サーバーがあり、いくつかのデータを結合する必要があります。変数またはパラメーターを使用して日付を渡そうとする場合を除いて、ほとんどすべての関数が機能しています。

以下は私が実行したテストです(多くのテストの1つ)。

declare @myDate datetime
set @myDate = convert(datetime,'2012-02-01',120)

select * from ccms..dbo.dcdnstat where timestamp > '2012-02-01'  -- WORKS

exec( 'select * from dbo.dcdnstat where cdn = ?', 21004) at ccms  -- WORKS

exec( 'select * from dbo.dcdnstat where timestamp > ?',@myDate) at ccms  -- ERROR 7213

select * from ccms..dbo.dcdnstat where timestamp > @myDate  -- ERROR 7322

メッセージ 7213、レベル 16、状態 1、行 9 プロバイダがリモート ストアド プロシージャ パラメータをリモート サーバー 'ccms' に渡そうとしましたが、失敗しました。パラメーターの数、順序、および渡された値が正しいことを確認してください。メッセージ 7322、レベル 16、状態 2、行 11 リンク サーバー "ccms" の OLE DB プロバイダー "MSDASQL" にパラメーター情報を渡すときにエラーが発生しました。

さまざまな日付形式を試してみましたが、上記のように、変数を使用して他のフィールドをクエリしたり、特定の値を使用する場合は日付をクエリしたりできます。

4

4 に答える 4

1

ストアド プロシージャ パラメータの「DATETIME」タイプの代わりに、「DATE」を使用してください。

(時間要件を必要としない限り)

于 2014-10-14T12:30:05.490 に答える
0

今日、これに似た問題がありました。これは、呼び出しサーバーとリンク サーバーが同じバージョンではないという事実に関係していました。1 つは SQL Server 2005 で、もう 1 つは SQL Server 2008 でした。この問題は、リモート エンド (2008) で照会される列が datetime2 であり、呼び出し元のサーバー (2005) が datetime2 をサポートしていないことが原因でした。

于 2012-05-14T20:05:18.007 に答える
0

これが少し遅れていることはわかっていますが、キャッシュシステムに似たものを探していて偶然見つけました. 同じバックエンド システムで作業しているようです。私のは Avaya CCMS システムです。日付を変数として渡すために私が行うことは次のとおりです。

DECLARE @myDate DATETIME
SET @myDate = CAST('2012-07-01' AS DATETIME) 

SELECT SUM(CallsOffered), SUM(CallsAnswered), SUM(SkillsetAbandonedAftThreshold)
FROM AvayaCCMS..dbo.mSkillsetStat
WHERE Timestamp = @myDate
于 2012-08-16T15:51:57.557 に答える