私は挿入を実行しているストアドプロシージャを持っています。しかし、いったんこのストアドプロシージャを実行すると、ロックはデータベースに残り、これ以上の挿入は不可能になります。実際、あなたはテーブルで選択をすることさえできません。SQL Server - データベースのロックを決定する
Management Studioでコールを実行すると、2つの選択肢が報告されているようですが、ストアドプロシージャには1つしかありません。
あなたは次のようにストアドプロシージャへの呼び出しは、ストアドプロシージャの
ソースが作るときに実際に実行されるすべてのT-SQLを示しています私が使用できる機能があるのであれば、私は疑問に思って。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Create_IRM_Appointment]
@VisitNumber varchar(50) = null,
@AppointmentTypeText varchar (255) = null,
@ClinicCode varchar(50) = null,
@DoctorCode varchar(50) = null,
@ScheduledDateTime varchar(50) = null,
@AppointmentStatusCode varchar(255) = null,
@PatientNumber varchar(200) = null,
@EpisodeNumber varchar(255) = null,
@ConsultantCode varchar(200) = null,
@ReferrerCode varchar(200) = null,
@MainSpecialtyCode varchar(100) = null,
@MessageType varchar (60) = null,
@StopDateTime varchar(50) = null,
@EpisodeType varchar (50) = null,
@EpisodeStatusCode varchar (50) = null,
@ParentEpisodeType varchar (50) = null,
@AdmissionType varchar (50) = null,
@AdmitDateTime varchar(50) = null,
@AdmitReason varchar(255) = null,
@AppointmentDateTime varchar(50) = null,
@BuildingCode varchar(50) = null,
@BedNumber varchar(50) = null,
@CategoryCode varchar(50) = null,
@ConsultantName varchar(255) = null,
@DischargeDateTime varchar(50) = null,
@DischargeDestination varchar(50) = null,
@DischargeMethod varchar(50) = null,
@FacilityCode varchar(50) = null,
@ReferralReason varchar(255) = null,
@ReferralAssigningAuthority varchar(50) = null,
@ReferrerName varchar(255) = null,
@TCIDate varchar(255) = null,
@TCILocation varchar (255) = null,
@WardCode varchar(50) = null
AS
BEGIN
declare @return_value int
declare @error_message varchar(255)
begin try
insert into dbo.IRM_TEMP_Appointment
(
VisitNumber,
WardCode,
ClinicCode,
DoctorCode ,
ScheduledDateTime ,
AppointmentStatusCode ,
PatientNumber ,
EpisodeNumber ,
ConsultantCode ,
ReferrerCode,
MainSpecialtyCode ,
MessageType ,
StopDateTime ,
EpisodeType ,
EpisodeStatusCode ,
ParentEpisodeType ,
AdmissionType ,
AdmitDateTime,
AdmitReason,
AppointmentDateTime ,
BuildingCode ,
BedNumber,
CategoryCode ,
ConsultantName ,
DischargeDateTime ,
DischargeDestination,
DischargeMethod ,
FacilityCode ,
ReferralReason,
ReferrerAssigningAuthority,
ReferrerName,
timeOfInsert,
timeOfAnalyse,
analysed,
currentStatus,
AppointmentTypeText,
TCIDate,
TCILocation)
values (
@VisitNumber,
@WardCode,
@ClinicCode,
@DoctorCode ,
case when @ScheduledDateTime = null then null else convert(datetime, STUFF(STUFF(STUFF(@ScheduledDateTime,9,0,' '),12,0,':'),15,0,':')) end,
@AppointmentStatusCode ,
@PatientNumber ,
@EpisodeNumber ,
@ConsultantCode ,
@ReferrerCode,
@MainSpecialtyCode ,
@MessageType ,
case when @StopDateTime = null then null else convert(datetime, STUFF(STUFF(STUFF(@StopDateTime,9,0,' '),12,0,':'),15,0,':')) end,
@EpisodeType ,
@EpisodeStatusCode ,
@ParentEpisodeType ,
@AdmissionType ,
case when @AdmitDateTime = null then null else convert(datetime, STUFF(STUFF(STUFF(@AdmitDateTime,9,0,' '),12,0,':'),15,0,':')) end,
@AdmitReason,
case when @AppointmentDateTime = null then null else convert(datetime, STUFF(STUFF(STUFF(@AppointmentDateTime,9,0,' '),12,0,':'),15,0,':')) end,
@BuildingCode ,
@BedNumber,
@CategoryCode ,
@ConsultantName ,
case when @DischargeDateTime = null then null else convert(datetime, STUFF(STUFF(STUFF(@DischargeDateTime,9,0,' '),12,0,':'),15,0,':')) end,
@DischargeDestination,
@DischargeMethod ,
@FacilityCode ,
@ReferralReason,
@ReferralAssigningAuthority,
@ReferrerName,
CURRENT_TIMESTAMP,
NULL,
0,
'UNPROCESSED',
@AppointmentTypeText,
case when @TCIDate = null then null else convert(datetime, STUFF(STUFF(STUFF(@TCIDate,9,0,' '),12,0,':'),15,0,':')) end,
@TCILocation);
set @return_value = 0
end try
begin catch
set @return_value = (SELECT ERROR_NUMBER() as Error_Number)
set @error_message = (SELECT ERROR_MESSAGE() as Error_Message)
RAISERROR (@error_message,10,1)
end catch;
return @return_value
END
ストアドプロシージャは完全に無邪そうです。コードが決してコミットしないトランザクションを実際に開始していないことを確認します。これは、ロックを解除する最も簡単な方法です。 'DBCC OPENTRAN'があなたを助けます。また、アプリケーション/データベースが[暗黙のトランザクションを有効にする](https://msdn.microsoft.com/library/ms187807)のような恐ろしいことをしていないことを確認してください。 –
私はAdam Machanicから[sp_WhoIsActive]を試してみましょう。[Brent Ozarのチュートリアル](https://www.brentozar.com/archive/2010/09/sql-server-dba-scripts-how-to-find-slow -sql-server-queries /) – SqlZim
私はあなたのコードでTransactionScopeを有効にしていると思います。スコープが完了していないか、または例外がスローされていない間にブレークポイントを設定すると、同様の動作が表示されます。 –