Checking @@ROWCOUNT failingUsing SSIS to get record counts for tables that may not existHandling exceptions in stored procedures called using insert-exec blocksSQL 2005 Unused proceduresDuplicate records in primary key during big selectHandling exceptions with INSERT-EXEC with linked server stored proc and table resultsBulk insert and fast ordered search large data 3B+ recordsExpensive Insert Operation pause Other Insert OperationProblems with insert trigger and primary keyImplicit conversion causing error part of the timeINSERT/SELECT xml column from one table to another
Is expanding the research of a group into machine learning as a PhD student risky?
Confused about a passage in Harry Potter y la piedra filosofal
Implement the Thanos sorting algorithm
Should my PhD thesis be submitted under my legal name?
voltage of sounds of mp3files
Is there any reason not to eat food that's been dropped on the surface of the moon?
Is exact Kanji stroke length important?
What is difference between behavior and behaviour
Can somebody explain Brexit in a few child-proof sentences?
What is the oldest known work of fiction?
How do I define a right arrow with bar in LaTeX?
Increase performance creating Mandelbrot set in python
What defines a dissertation?
Curses work by shouting - How to avoid collateral damage?
Is a roofing delivery truck likely to crack my driveway slab?
How could Frankenstein get the parts for his _second_ creature?
Can a monster with multiattack use this ability if they are missing a limb?
How was Earth single-handedly capable of creating 3 of the 4 gods of chaos?
Why Were Madagascar and New Zealand Discovered So Late?
How can I replace every global instance of "x[2]" with "x_2"
Dot above capital letter not centred
What's a natural way to say that someone works somewhere (for a job)?
Teaching indefinite integrals that require special-casing
What is the opposite of 'gravitas'?
Checking @@ROWCOUNT failing
Using SSIS to get record counts for tables that may not existHandling exceptions in stored procedures called using insert-exec blocksSQL 2005 Unused proceduresDuplicate records in primary key during big selectHandling exceptions with INSERT-EXEC with linked server stored proc and table resultsBulk insert and fast ordered search large data 3B+ recordsExpensive Insert Operation pause Other Insert OperationProblems with insert trigger and primary keyImplicit conversion causing error part of the timeINSERT/SELECT xml column from one table to another
I have a code similar to the one below in one of my SQL procedures,
declare @rowcount int
update table1
set value = @value
where id = @id
select @rowcount = @@ROWCOUNT
if ( @rowcount = 0 )
begin
insert into table1(id, value1,value2...)
select (@id, @value1, @value2...)
end
But it fails rarely, like once in a day etc. That means the data exists in the table and @@rowcount is 0 and it tried to insert data and primary key violation happening. Here all values which are inserting ie. id,value1,value2 etc are integers. Any thoughts?
sql-server locking primary-key
add a comment |
I have a code similar to the one below in one of my SQL procedures,
declare @rowcount int
update table1
set value = @value
where id = @id
select @rowcount = @@ROWCOUNT
if ( @rowcount = 0 )
begin
insert into table1(id, value1,value2...)
select (@id, @value1, @value2...)
end
But it fails rarely, like once in a day etc. That means the data exists in the table and @@rowcount is 0 and it tried to insert data and primary key violation happening. Here all values which are inserting ie. id,value1,value2 etc are integers. Any thoughts?
sql-server locking primary-key
add a comment |
I have a code similar to the one below in one of my SQL procedures,
declare @rowcount int
update table1
set value = @value
where id = @id
select @rowcount = @@ROWCOUNT
if ( @rowcount = 0 )
begin
insert into table1(id, value1,value2...)
select (@id, @value1, @value2...)
end
But it fails rarely, like once in a day etc. That means the data exists in the table and @@rowcount is 0 and it tried to insert data and primary key violation happening. Here all values which are inserting ie. id,value1,value2 etc are integers. Any thoughts?
sql-server locking primary-key
I have a code similar to the one below in one of my SQL procedures,
declare @rowcount int
update table1
set value = @value
where id = @id
select @rowcount = @@ROWCOUNT
if ( @rowcount = 0 )
begin
insert into table1(id, value1,value2...)
select (@id, @value1, @value2...)
end
But it fails rarely, like once in a day etc. That means the data exists in the table and @@rowcount is 0 and it tried to insert data and primary key violation happening. Here all values which are inserting ie. id,value1,value2 etc are integers. Any thoughts?
sql-server locking primary-key
sql-server locking primary-key
edited Mar 20 at 15:47
Aaron Bertrand♦
153k18297492
153k18297492
asked Mar 19 at 19:17
blueblue
1213
1213
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
I'm not sure why you're using a variable, but you need to protect multiple statements with a transaction. What's happening is two users are calling the procedure at the same time, both are getting rowcount = 0, and then they're both trying to insert as a result.
set transaction isolation level serializable;
begin transaction;
update dbo.table1
set value = @value
where id = @id;
if (@@ROWCOUNT = 0)
begin
insert dbo.table1(id, value1,value2...)
values(@id, @value1, @value2...);
end
commit transaction;
Appreciate your answers! How about using IF EXISTS (select top 1 1 from table1 where id @id) then update and else Insert?
– blue
Mar 20 at 13:11
1
@blue that pattern requires an extra access to the table (in the case where it exists). IF EXISTS essentially does the exact same thing the update does to try to locate the row - why do that twice?
– Aaron Bertrand♦
Mar 20 at 14:39
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "182"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdba.stackexchange.com%2fquestions%2f232558%2fchecking-rowcount-failing%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I'm not sure why you're using a variable, but you need to protect multiple statements with a transaction. What's happening is two users are calling the procedure at the same time, both are getting rowcount = 0, and then they're both trying to insert as a result.
set transaction isolation level serializable;
begin transaction;
update dbo.table1
set value = @value
where id = @id;
if (@@ROWCOUNT = 0)
begin
insert dbo.table1(id, value1,value2...)
values(@id, @value1, @value2...);
end
commit transaction;
Appreciate your answers! How about using IF EXISTS (select top 1 1 from table1 where id @id) then update and else Insert?
– blue
Mar 20 at 13:11
1
@blue that pattern requires an extra access to the table (in the case where it exists). IF EXISTS essentially does the exact same thing the update does to try to locate the row - why do that twice?
– Aaron Bertrand♦
Mar 20 at 14:39
add a comment |
I'm not sure why you're using a variable, but you need to protect multiple statements with a transaction. What's happening is two users are calling the procedure at the same time, both are getting rowcount = 0, and then they're both trying to insert as a result.
set transaction isolation level serializable;
begin transaction;
update dbo.table1
set value = @value
where id = @id;
if (@@ROWCOUNT = 0)
begin
insert dbo.table1(id, value1,value2...)
values(@id, @value1, @value2...);
end
commit transaction;
Appreciate your answers! How about using IF EXISTS (select top 1 1 from table1 where id @id) then update and else Insert?
– blue
Mar 20 at 13:11
1
@blue that pattern requires an extra access to the table (in the case where it exists). IF EXISTS essentially does the exact same thing the update does to try to locate the row - why do that twice?
– Aaron Bertrand♦
Mar 20 at 14:39
add a comment |
I'm not sure why you're using a variable, but you need to protect multiple statements with a transaction. What's happening is two users are calling the procedure at the same time, both are getting rowcount = 0, and then they're both trying to insert as a result.
set transaction isolation level serializable;
begin transaction;
update dbo.table1
set value = @value
where id = @id;
if (@@ROWCOUNT = 0)
begin
insert dbo.table1(id, value1,value2...)
values(@id, @value1, @value2...);
end
commit transaction;
I'm not sure why you're using a variable, but you need to protect multiple statements with a transaction. What's happening is two users are calling the procedure at the same time, both are getting rowcount = 0, and then they're both trying to insert as a result.
set transaction isolation level serializable;
begin transaction;
update dbo.table1
set value = @value
where id = @id;
if (@@ROWCOUNT = 0)
begin
insert dbo.table1(id, value1,value2...)
values(@id, @value1, @value2...);
end
commit transaction;
answered Mar 19 at 20:07
Aaron Bertrand♦Aaron Bertrand
153k18297492
153k18297492
Appreciate your answers! How about using IF EXISTS (select top 1 1 from table1 where id @id) then update and else Insert?
– blue
Mar 20 at 13:11
1
@blue that pattern requires an extra access to the table (in the case where it exists). IF EXISTS essentially does the exact same thing the update does to try to locate the row - why do that twice?
– Aaron Bertrand♦
Mar 20 at 14:39
add a comment |
Appreciate your answers! How about using IF EXISTS (select top 1 1 from table1 where id @id) then update and else Insert?
– blue
Mar 20 at 13:11
1
@blue that pattern requires an extra access to the table (in the case where it exists). IF EXISTS essentially does the exact same thing the update does to try to locate the row - why do that twice?
– Aaron Bertrand♦
Mar 20 at 14:39
Appreciate your answers! How about using IF EXISTS (select top 1 1 from table1 where id @id) then update and else Insert?
– blue
Mar 20 at 13:11
Appreciate your answers! How about using IF EXISTS (select top 1 1 from table1 where id @id) then update and else Insert?
– blue
Mar 20 at 13:11
1
1
@blue that pattern requires an extra access to the table (in the case where it exists). IF EXISTS essentially does the exact same thing the update does to try to locate the row - why do that twice?
– Aaron Bertrand♦
Mar 20 at 14:39
@blue that pattern requires an extra access to the table (in the case where it exists). IF EXISTS essentially does the exact same thing the update does to try to locate the row - why do that twice?
– Aaron Bertrand♦
Mar 20 at 14:39
add a comment |
Thanks for contributing an answer to Database Administrators Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdba.stackexchange.com%2fquestions%2f232558%2fchecking-rowcount-failing%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown