2016-07-20 23 views
0

Microsoft SQL Server Management Studioで、あるデータモデルから別のデータモデルにデータを移動するための移行スクリプトを作成しています。私が実行している問題は、ソースデータベースで、いくつかのテーブルに私が比較する必要のある外部キー列があることです。コードのスニペット:SQL Server:同じ名前の列を使用する

INSERT INTO TargetDB.dbo.Encounter(EncounterID, PATID, DRG) 
Select 
visit_occurrence_id, 
person_id, 
(Select 
    Case when ((Select top 1 observation_concept_id from SourceDB.dbo.Observation where visit_occurrence_id = visit_occurrence_id) = 3040464) 
    Then (Select top 1 value_as_string from SourceDB.dbo.Observation where visit_occurrence_id = visit_occurrence_id) 
    Else NULL End 
) 
from SourceDB.dbo.Visit_occurrence 

あなたが見ることができるように、私はSourceDB.dbo.Visit_occurrenceにvisit_occurrence_idするSourceDB.dbo.Observationにvisit_occurrence_id比較する必要があります。それは、visit_occurrence_idが常にそれ自体と等しいので、SourceDB.dbo.Observationの最初の行から値を戻すだけです。

これを行うには適切な方法はありますか?最初のvisit_occurrence_id値をクエリ内の変数に割り当てることができるので、別の名前を使用できますか?私はここでかなり失われています。

+0

SourceDB.dbo.Observation.visit_occurence –

+0

テーブルのエイリアスを作成することもできます。SourceDB.dbo.Observation AS A - WHERE –

+0

でA.visit_occurenceを使用します。これはチケットです!最初の解決策は完璧に働いた、ありがとう! – JazzBullets

答えて

0

ここでは、もう少し詳しく説明します。それは完全修飾名だことであなたは常にオブジェクトを参照することができますが、必ずしも必要ではない:

Database.Schema.Table 

またはSQL Serverとの

Database.Schema.Table.Column 

が、それもリンクされたサーバーのサーバーを含むことができ、シナリオ。

ビュー、プロシージャー、関数などの他のオブジェクトにも当てはまります。表や列のエイリアシングは、この資格を短縮するための良い戦略になります。

曖昧さがある場合は、いつでも必要です。しかし、それはあなたが将来の頭痛を救うことができるので、かなり明白であることは良い習慣です。たとえば、次のビューを考えてみましょう。

今のところ、EmployeeId以外は列名が異なるため、すべてが問題ありません。ただし、今後、「場所」表に「ステータス」列を追加してこのビューを分割する可能性があります。したがって、selectのすべての列にテーブル接頭辞を明示的に含める方が良いでしょう。

あなたのケースでは、クエリはクロスデータベースなので、クエリのすべての部分のデータベースについても明示してください。

0

コメントの中でsnow_FFFFFFの答えが使用されました:SourceDB.dbo.Observation.visit_occurence_idを使用しました。

関連する問題