2 つの患者 ID を渡すと、2 番目の患者の詳細を選択して出力する一時ストアド プロシージャを作成する MS SQL Server スクリプトがあります。次に、それらの識別子と詳細を使用して別のストアド プロシージャを呼び出し、2 人の患者を結合します。
このスクリプトは、ここのいくつかのテスト データベースで完全に実行されますが、忙しいサイトで同じスクリプトを実行したとき、患者の詳細を選択していたローカル変数が「時折」PRINT に間に合わなかったように見えましたが、マージ手順の後続の EXEC では、常に問題なく設定されていました。ほとんどの場合、PRINT はこれらの値を正しく示しました。
ここに私がやっていることの縮小版があります。どう思いますか?
CREATE PROCEDURE [dbo].[TMP_MergeMRNs] @Merge_From_Medical_Record_Number VARCHAR(64) = NULL,
@Merge_From_Institution_Name VARCHAR(64) = NULL,
@Merge_To_Medical_Record_Number VARCHAR(64) = NULL,
@Merge_To_Institution_Name VARCHAR(64) = NULL
AS
BEGIN
SET NOCOUNT ON
SET DEADLOCK_PRIORITY LOW
/* ALL parameters must be supplied */
IF @Merge_From_Medical_Record_Number IS NULL
OR @Merge_From_Institution_Name IS NULL
OR @Merge_To_Medical_Record_Number IS NULL
OR @Merge_To_Institution_Name IS NULL
BEGIN
PRINT 'ERROR. One or more of the 4 required fields was empty.'
RETURN 4
END
/* Retrieve the merge_to patient demographics */
DECLARE @lstNm NVARCHAR(64),
@frstNm NVARCHAR(64),
@mdlNm NVARCHAR(64)
SELECT @lstNm = id1.LastName,
@frstNm = id1.FirstName,
@mdlNm = id1.MiddleName
FROM [dbo].[PATIENT] pid1
INNER JOIN [dbo].[INSTITUTION] i1
ON pid1.InstitutionDBKey = i1.InstitutionDBKey
WHERE i1.InstitutionName = @Merge_To_Institution_Name
AND pid1.MedicalRecordNumber = @Merge_To_Medical_Record_Number
PRINT LTrim('Merge From Patient: ' + RTrim(@Merge_From_Medical_Record_Number)) + ' / ' + LTRIM(RTRIM(@Merge_From_Institution_Name))
PRINT LTrim('Merge To Patient: ' + RTrim(@Merge_To_Medical_Record_Number)) + ' / ' + LTRIM(RTRIM(@Merge_To_Institution_Name))
PRINT ' Name: ' + ISNULL(LTRIM(RTRIM(@lstNm)), '') + IsNull(', ' + LTRIM(RTRIM(@frstNm)), '') + IsNull(' ' + LTRIM(RTRIM(@mdlNm)), '')
EXEC PatientMerge
@Merge_From_Medical_Record_Number,
@Merge_From_Institution_Name,
@Merge_To_Medical_Record_Number,
@Merge_To_Institution_Name,
/* last */ @lstNm,
/* first */ @frstNm,
/* middle */ @mdlNm
RETURN 0
END
GO