У меня есть базовая хранимая процедура SELECT в SQL Server, и она связана с интерфейсом MS Access.Пользователи получают блокировки таблиц, когда несколько пользователей пытаются запустить одну и ту же хранимую процедуру (т. Е. ODBC - сбой вызова или таблица в настоящее время заблокирована).Есть ли способ реализовать очередь или не допустить этого.
Я попытался переместить серверы ближе, чтобы посмотреть, была ли это проблема с задержкой, и попробовал OPTION (MAXDOP 1) в случае, если это была проблема с процессором.
(@username as varchar(20),
@searchcriteria as varchar(50)
)
AS
SET NOCOUNT ON;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
--SET @username = 'caddo';
--SET @searchcriteria = 9;
--SET @portfolio = 'WH – Apollo';
--PRINT '%'+ RIGHT(CAST(@situsloanid as varchar(10)),@loanLength) + '%'
SELECT tblPortfolio.PortfolioID,
tblAssets.AssetID,
tblAssets.ModelEntity,
tblPortfolio.Portfolio,
tblAssets.SitusLoanID,
tblEmployees.Last AS AMIntials,
tblEmployees_1.Last AS TeamLead,
tblStatus.StatusType, tblEmployees.NetworkUserName, tblRegion.ID, tblRegion.Region,
IIf(1=1 Or 0=1,1,IIf(@username=[tblEmployees].[NetworkUserName] Or @username=[tblEmployees_1].[NetworkUserName] Or @username=[tblEmployees_2].[NetworkUserName] Or @username=[tblEmployees_3].[NetworkUserName] Or @username=[tblEmployees_4].[NetworkUserName] Or @username=[tblEmployees_5].[NetworkUserName],1,0)) AS [Select],
tblEmployees_1.NetworkUserName, tblEmployees_2.Last AS PMLead, tblEmployees_3.Last AS Analyst, tblEmployees_4.Last AS Admin, tblEmployees_5.Last AS ComplianceLead, tblAssets.AssetName,
tblAssets.BorrowerName, tblEmployees.compliance AS ComplianceBool, tblAssets.SitusLoanID, tblAssets.Alias
FROM tblAssets LEFT JOIN tblEmployees AS tblEmployees_5 ON tblAssets.ComplianceID = tblEmployees_5.LoginID
LEFT JOIN tblEmployees AS tblEmployees_3 ON tblAssets.AnalystID = tblEmployees_3.LoginID
LEFT JOIN tblEmployees AS tblEmployees_2 ON tblAssets.PMLeaderID = tblEmployees_2.LoginID
LEFT JOIN tblEmployees AS tblEmployees_1 ON tblAssets.AMLeaderID = tblEmployees_1.LoginID
LEFT JOIN tblEmployees ON tblAssets.AssetMngrID = tblEmployees.LoginID
LEFT JOIN tblStatus ON tblAssets.PipelineStatusID = tblStatus.StatusID
LEFT JOIN tblEmployees AS tblEmployees_4 ON tblAssets.ServicerContactID = tblEmployees_4.LoginID
LEFT JOIN tblPortfolio ON tblAssets.PortfolioID = tblPortfolio.PortfolioID
LEFT JOIN tblRegion ON tblAssets.RegionId = tblRegion.ID
WHERE (1=1 )
AND (tblPortfolio.Portfolio Like '%'+ @searchcriteria + '%'
OR tblAssets.SitusLoanID Like '%'+ @searchcriteria + '%'
OR tblAssets.BorrowerName Like '%'+ @searchcriteria + '%'
OR tblEmployees_2.Last Like '%'+ @searchcriteria + '%'
OR tblAssets.AssetName Like '%'+ @searchcriteria + '%'
OR tblAssets.Alias Like '%'+ @searchcriteria + '%'
AND (IIf(1=1 Or 0=1,1,IIf(@username=[tblEmployees].[NetworkUserName]
Or @username=[tblEmployees_1].[NetworkUserName]
Or @username=[tblEmployees_2].[NetworkUserName]
Or @username=[tblEmployees_3].[NetworkUserName]
Or @username=[tblEmployees_4].[NetworkUserName]
Or @username=[tblEmployees_5].[NetworkUserName],1,0)))=1)
ORDER BY tblAssets.AssetName, tblAssets.SitusLoanID
OPTION (MAXDOP 1);
Я бы хотел, чтобы пользователи могли запускать SP и не получать ошибки блокировки или помещать их в очередь для получения ожидаемых данных.