1

開発者版とデータベース版の両方がインストールされた VSTS 2008 を使用しています。DB エディションの GDR がインストールされています (バージョン 9.0.31124)。リンク サーバー (DB2 メインフレーム、iSeries、および SQL Server) を参照するコード内のいくつかの場所があります。そのような例の 1 つは、ストア プロシージャにある次のコードです。

SELECT VendorID   
INTO     #tmpVendors   
FROM    DataWhse.BIDataWhse.BP.Vendors   
WHERE  EffectiveDate < DATEADD(day, -1, DATEADD(month, 1, CAST(LTRIM(RTRIM(CAST(@Month AS CHAR(2)))) + '/01/' + CAST(@YEAR AS CHAR(4)) AS DATETIME)))   
AND     ExpirationDate > CAST(LTRIM(RTRIM(CAST(@Month AS CHAR(2)))) + '/01/' + CAST(@YEAR AS CHAR(4)) AS DATETIME) 

このタイプのコードで未解決の参照エラー (TSD03006) が発生します。このタイプのリンク サーバー参照の処理方法に関する現在の推奨事項は何ですか? この場合、別の SQL Server 2005 インスタンスを扱っています。リンク先のデータベースには、使用しないテーブルがたくさんあります。そのため、可能であれば、その DB のスキーマ全体をプルダウンする必要は避けたいと考えています。

検索して見つけた情報が古いようです。GDR はこの 1 年間で大幅に変更され、現在は廃止されている以前の CTP バージョンから多くのガイダンスが提供されています。

4

2 に答える 2

2

私はついにこれを解決しました。BIDataWhse という名前のデータベース プロジェクトを作成し、bp スキーマを追加し、bp ユーザーを追加し、bp.vendors テーブル定義を追加しました。次に、そのプロジェクトをコンパイルし、エラーが発生したプロジェクトへの db 参照を追加しました。リファレンスでは、サーバーとデータベースの変数を指定し、変数の置換を許可しました。結果のコードは次のとおりです。

SELECT VendorID      
INTO     #tmpVendors      
FROM    [$(DataWhse)].[$(BIDataWhse)].BP.Vendors      
WHERE  EffectiveDate < DATEADD(day, -1, DATEADD(month, 1, CAST(LTRIM(RTRIM(CAST(@Month AS CHAR(2)))) + '/01/' + CAST(@YEAR AS CHAR(4)) AS DATETIME)))      
AND     ExpirationDate > CAST(LTRIM(RTRIM(CAST(@Month AS CHAR(2)))) + '/01/' + CAST(@YEAR AS CHAR(4)) AS DATETIME)     
于 2009-02-09T13:33:20.993 に答える
2

この状況を拡張するには、データベース参照の追加がほとんどの作業を行います。リンクされたデータベースのプロジェクトを作成し、データベースから db スキーマをインポートする必要があります (または、データベース全体を実行したくない場合は、必要なテーブルのスクリプトをインポートします)。「参照では、サーバーとデータベースの変数を指定し、変数置換を許可しました」 - これは、[DB 参照の追加] ダイアログで、[サーバー変数の定義]、[データベース変数の定義]、および [スキーマ オブジェクトとスクリプトの更新] をオンにできることを意味します。変数の名前 (変数は $(..) で囲みます) を入力し、置換する値 (デプロイメント スクリプトの生成時に挿入する実際のサーバー/データベース名) を入力します。更新オプションを使用すると、プロジェクトを通過し、すべてのスクリプトを編集して、サーバー/データベース名を変数に置き換えます。いいね。

于 2009-09-09T18:57:47.367 に答える