The problem is whenever I execute the stored procedured "usp_Execute100K" in the Query Windows simultaneously the server could not locate the record and it creating a new record even though the record is already there. You have to run the "usp_Execute100K" multiple windows simultaneously to see this problem.
What I want is to make sure the server only create 1 record per day, if the record does exist then only update the "StatisticTotal" column to the next number.
This problem is taught.
The below are 1 table and two stored procedures
Statistic /Table name/
usp_Statistic_InsertOrUpdate /this will update the "StatisticTotal" column or insert if the record does not exist/
usp_Execute100K /* this will execute the usp_Statistic_InsertOrUpdate 100 thousand times*/
PLEASE COPY THE SCRIPT BELOW TO RECREATE THE TABLE AND STORED PROCEDURES.
GO
/****** Object:  StoredProcedure [dbo].[usp_Execute100K]    Script Date: 09/07/2011 15:37:29 ******/
DROP PROCEDURE [dbo].[usp_Execute100K]
GO
/****** Object:  StoredProcedure [dbo].[usp_Statistic_InsertOrUpdate]    Script Date: 09/07/2011 15:37:29 ******/
DROP PROCEDURE [dbo].[usp_Statistic_InsertOrUpdate]
GO
/****** Object:  Table [dbo].[Statistic]    Script Date: 09/07/2011 15:37:28 ******/
DROP TABLE [dbo].[Statistic]
GO
/****** Object:  Table [dbo].[Statistic]    Script Date: 09/07/2011 15:37:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Statistic](
    [StatisticID] [uniqueidentifier] NOT NULL,
    [StatisticAccount] [uniqueidentifier] NOT NULL,
    [StatisticTotal] [float] NOT NULL,
    [StatisticCreatedDate] [datetime] NOT NULL,
    [DebugDate] [datetime] NULL,
 CONSTRAINT [PK_Statistics] PRIMARY KEY CLUSTERED 
(
    [StatisticID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  StoredProcedure [dbo].[usp_Statistic_InsertOrUpdate]    Script Date: 09/07/2011 15:37:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_Statistic_InsertOrUpdate](
@StatisticAccount  uniqueidentifier
)
AS
SET NOCOUNT OFF; --this can be turn on or off, it has no effects
DECLARE @NowDate date
SET     @NowDate=CONVERT(datetime, CONVERT(char, GETDATE(), 106))--remove all time.
--UPDATE ONLY IF IT HAS THE SAME DATE
UPDATE TOP (1) Statistic SET   StatisticTotal =StatisticTotal+1 WHERE (StatisticAccount=@StatisticAccount AND StatisticCreatedDate = @NowDate)
if @@ROWCOUNT=0--If the above statement return no effects then create a new record
BEGIN
    INSERT TOP (1)INTO Statistic(StatisticID, StatisticAccount, StatisticTotal, StatisticCreatedDate,DebugDate)     VALUES (NEWID(),@StatisticAccount,1,@NowDate,@NowDate)
END
GO
/****** Object:  StoredProcedure [dbo].[usp_Execute100K]    Script Date: 09/07/2011 15:37:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_Execute100K]
AS
SET NOCOUNT OFF; --this can be turn on or off, it has no effects
declare @current float
set @current=0
while (@current <100000)    
begin
--INSERT THIS STATEMENT for 100 thousand times
    exec usp_Statistic_InsertOrUpdate'4c34eea5-fe17-4b11-8e06-0039577e7421'
    set @current = @current + 1
 end
GO