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出願日> キャスト(変換(VARCHAR(10)、GETDATE()、120)+ ' 00:00:00 ' AS 日時に) 5。 6。 - 同期受信 7。 SELECT DISTINCT患者番号、パスポート番号のID番号がINTO #tt から [ 192.168.101.33 ]。[ Rmlis6 ]。[ DBO ]。[ インターフェイスビュー_依頼主テーブル] 出願日> キャスト(変換(VARCHAR(10)、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 DATEDIFF(YEAR、ht.BIRTHDAY、GETDATE())> 0 THEN CONVERT(VARCHAR 、DATEDIFF(YEAR、ht.BIRTHDAY、GETDATE()))+ ' 岁' 22 WHEN DATEDIFF(MONTH、ht.BIRTHDAY、GETDATE())= 0 23 THEN CONVERT(VARCHAR、DATEDIFF(DAY、ht.BIRTHDAY、GETDATE( )))+ ' 天' 24 ELSE CONVERT(VARCHAR、DATEDIFF(MONTH、ht.BIRTHDAY、GETDATE()))+' 月' END 、 25 t.IDNum = CASE t.IDNumisが ヌルTHEN(SELECT 変換(VARCHAR(100)、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
ここではまた、右内側には参加し、参加することができます