SQL一時テーブル、MERGEのINTOおよびUPDATE更新別のテーブルにテーブルのフィールド

1  ALTER  PROC  [ DBO ][ Pro_med_records_sync ] 
2  AS 
3  BEGIN 
。4  SELECT  DISTINCT患者番号、パスポート番号のID番号をINTO #tt から [ 192.168.101.33 ][ Rmlis6 ][ DBO ][ インターフェイスビュー_メイン依頼テーブル]  WHERE出願日>  キャスト変換VARCHAR10)、GETDATE()、120+  ' 00:00:00 '  AS  日時に5。 
6。   - 同期受信
7。     SELECT  DISTINCT患者番号、パスポート番号のID番号がINTO #tt から [ 192.168.101.33 ][ Rmlis6 ][ DBO ][ インターフェイスビュー_依頼主テーブル] 出願日> キャスト変換VARCHAR10)、GETDATE()、120+ ' 夜12時00分00秒'    日時8      MERGE INTO  [ DBO ] T .Yy_MedRecords
 9      (USING SELECT   
10   * 
11   FROM 
12  OPENQUERY(HIS_DB、SELECT PATIENTID、VISITID、ZYH、BEDNO、PATNAME、誕生日、性別、PAT_STATUS、 
 13  CHARGE_TYPE、NURSE_CLASS、IN_HOS_TIME、 DISGNOSE、DOCTORCODE、DOCTORNAME、DEPT_CODE、DEPT_NAME、
 14  WARD_CODE、WARD_NAME、前払、TOTAL_COSTS、VEDLOCK、JOB、ADDRESS、NATION、COMPANY、TEL、 
 15  CONTACT、RELATION、STATUS = NEXTCARE.VIEW_PATIENTS_INFO FROM RETEL ' 在院' "))AS HT 
 16      ON t.InPatNo = ht.ZYHコレートChinese_PRC_CI_AS
 17      MATCHED THEN 18 のUPDATE SET t.PatName = ht.PATNAME、
 19                     t.Sex =   ht.SEX、
 20                     t.DiagValue = ht.DISGNOSE、
 21                     T .Age = CASE DATEDIFFYEAR、ht.BIRTHDAY、GETDATE())> 0 THEN CONVERTVARCHAR
              DATEDIFFYEAR、ht.BIRTHDAY、GETDATE()))+ ' ' 
22                                WHEN  DATEDIFFMONTH、ht.BIRTHDAY、GETDATE())= 0 
23                                  THEN  CONVERTVARCHARDATEDIFFDAY、ht.BIRTHDAY、GETDATE( )))+ ' '     
24                              ELSE  CONVERTVARCHARDATEDIFFMONTH、ht.BIRTHDAY、GETDATE()))+' '  END 25                     t.IDNum =  CASE  t.IDNumisが   ヌルTHENSELECT 変換VARCHAR100)、AのID番号、パスポート番号Chinese_PRC_CI_ASを。COLLATE)から #tt AS A A.患者数= HT。 PATIENTID) 
 26であるELSE t.IDNum END 27                     t.InPatNo = ht.ZYH
 28 29 30 NOT MATCHED BY                                                                 
 
      TARGET THEN

一時テーブル1.SqlServerアプリケーション

  上記の手順は、店舗患者情報同期病院に使用される各マッチ変更した場合、患者は、LISデータベースから挿入操作、データLIS検査依頼フォームの大量に起因する検査依頼テーブルLISシステムからID番号を取得する必要がありますクエリ、時間がかかりすぎます。

  上記課題を解決するためには、SQL一時テーブルによって上記のステートメントを最適化することができる。一時テーブルに修飾LIS申込関連フィールドは、各マッチ操作で一時テーブルからのクエリー。

  一時テーブルの動作については、以下を言いました:

    1.1グローバル・テンポラリ・テーブルとローカル・テンポラリ・テーブル:

      一時テーブルの有効期限その主な違いの両方によって標識、一時テーブル#tをローカルで、##トンでラベルされたグローバル一時テーブルは、一時テーブル中のローカルメモリへの書き込みは、ストアドプロシージャの実行後に期限切れに自動的にグローバルであります唯一失敗した場合のSQLServerサービスの再起動中に一時テーブル

    一時テーブルを作成する方法1.2

      表からは#tに*を選択

2.MERGE INFO声明

    2.1MERGE INTOステートメントの使用:

      ターゲットテーブルの行は、元のテーブル内に存在している間、修正することに適合させることができるテーブルに送信元と宛先の行に特に文テーブルの同期、ターゲット表にソース・データ・テーブルの、すなわち同期、合流は存在しません削除するには、元のテーブルに存在しないターゲット表の行があり、インサート

    2.2

      TとしてTARGET_TABLE INTO MERGE

      SとしてSOURCE_TABLEを使用しました

      T.Id = S.Idに

      MATCHED THNE 

        アップデートはT.Name = S.nameを設定しました

      TARGET THNEによって一致しない場合

        挿入.......

      THEN SOURCEによって一致しない場合

        削除... /更新...

3.UPDATEは、別のテーブルにテーブルのフィールドを更新します

UPDATE SET a.DocId = b.F_Id FROM Yy_MedRecords、dbo.Sys_User B WHERE a.DocCode = b.F_Account    

別のテーブル、1つのテーブル内のデータを更新し、方法は、上記

別の表現で:

  UPDATE A
      SET A1 = B1、A2 = B2、A3 = B3
      Aから  LEFT JOIN B ON  A.IDを= B.ID

   ここではまた、右内側には参加し、参加することができます

  

    

おすすめ

転載: www.cnblogs.com/alan-1996/p/12617697.html