都用了行排挤锁了,为什么存储过程没有被执行6000次呢
都用了行排斥锁了,为什么存储过程没有被执行6000次呢?
--存储过程:
createproc [dbo].[pro_upd_GetPK_Max2]
(
@pKName varchar(32),
@ret int output--动态sql输出参数必须声明
)
as
begin tran
if not exists(select 1 from tPrimarykeys_Max2 where PKName = @pKName)
begin
declare @error_Msg nvarchar(32)
set @error_Msg = '列' + @pKName + '不存在'
rollback tran
raiserror(@error_Msg, 16, 1)
end
select @ret = MaxValue from tPrimarykeys_Max2 with(tablockx) where PKName = @pKName
set @ret = @ret + 1
update tPrimarykeys_Max2 set MaxValue = @ret where PKName = @pKName
commit tran
//==========================多线程执行======================
class Program
{
static void Main()
{
Console.WriteLine("CallByMultipleThread:start");
Console.WriteLine("RunByMultipleThread's time:{0}", CallByMultipleThread());
Console.WriteLine("CallByMultipleThread:end");
Console.ReadLine();
}
//以多线程来运行程序
static int RunCounts = 20;//指示现在正在运行的线程的个数
public static long CallByMultipleThread()
{
Random rd = new Random();
Stopwatch CalTimer = new Stopwatch();
RunCounts = 20;//执行即将执行的线程数
CalTimer.Start();
for (int i = 0; i < RunCounts; i++)
{
Thread CalThreads = new Thread(new ParameterizedThreadStart(CalSum));
CalThreads.Priority = ThreadPriority.Highest;
CalThreads.Start();
}
while (RunCounts == 0) ;
CalTimer.Stop();
return CalTimer.ElapsedMilliseconds;
}
//执行存储过程
[SqlProcedure]
public static void CalSum(object n)
{
string[] pknames = {"MemberId_Max", "ShopId_Max", "AreaId_Max", "DetailAddressId_Max", "CertificateId_Max", "GoodsId_Max", "GoodsTypeId_Max",
"OrderId_Max", "OrderDetailId_Max", "DeliveryInfoId_Max", "CommunicationId_Max", "SendDetailId_Max", "EvaluationId_Max", "EvaluationDetailId_Max",
"QuestionId_Max","ReplyId_Max", "RecommenedShopId_Max","NoticeId_Max","AuthorityId_Max","ErrorLogId_Max"};
int x = 0;
string proc = "pro_upd_GetPK_Max2";
SqlConnection cnn = new SqlConnection("server=KY-PC;Database=Takeout;Persist Security Info=True;User ID=sa;Password=123456;");
cnn.Open();
for (int i = 0; i < 300; i++)
{
try
{
SqlCommand cmd = new SqlCommand();