@@ROWCOUNT returning 1 when no UPDATE made
I have some SQL within a stored procedure where I am updating a table based on another SELECT
statement from a temp table (code below).
SET NOCOUNT ON
DECLARE @RowCount int
UPDATE TABLEX SET
TRA = ISNULL (ir.DcTra, DCBASIC.TRA),
TRD = ISNULL(CAST(NULLIF(REPLACE(ir.DcTRD, '-', ''), '') AS datetime), DCBASIC.TRD),
LSINC = ISNULL(ir.DcLsInc, DCBASIC.LSINC),
REVSWOVR = ISNULL(ir.DcRevswovr, DCBASIC.REVSWOVR) FROM #TempData ir WHERE TABLEX.MEMBNO = ir.IntMembNo
SET @RowCount = @@ROWCOUNT
The @RowCount
variable is being set to 1.
The SELECT
of the #TempData table returns no rows and no rows in the TABLEX table are updated (or even exist) with the MembNo (I have added SELECT
statements within the sp to debug and they confirm this)
Why is @RowCount
being set to 1?
sql-server sql-server-2008 tsql
|
show 5 more comments
I have some SQL within a stored procedure where I am updating a table based on another SELECT
statement from a temp table (code below).
SET NOCOUNT ON
DECLARE @RowCount int
UPDATE TABLEX SET
TRA = ISNULL (ir.DcTra, DCBASIC.TRA),
TRD = ISNULL(CAST(NULLIF(REPLACE(ir.DcTRD, '-', ''), '') AS datetime), DCBASIC.TRD),
LSINC = ISNULL(ir.DcLsInc, DCBASIC.LSINC),
REVSWOVR = ISNULL(ir.DcRevswovr, DCBASIC.REVSWOVR) FROM #TempData ir WHERE TABLEX.MEMBNO = ir.IntMembNo
SET @RowCount = @@ROWCOUNT
The @RowCount
variable is being set to 1.
The SELECT
of the #TempData table returns no rows and no rows in the TABLEX table are updated (or even exist) with the MembNo (I have added SELECT
statements within the sp to debug and they confirm this)
Why is @RowCount
being set to 1?
sql-server sql-server-2008 tsql
How do you know that no update was performed? Add:SELECT COUNT(*) FROM #TempData
.
– usr
Apr 16 '14 at 7:48
@usr - as I stated in my post, "(I have added SELECT statements within the sp to debug and they confirm this)"
– Mike
Apr 16 '14 at 8:07
Ok, did not see that statement. Are there triggers? To be clear: It is extremely unlikely that you have found a bug in SQL Server so the bug is with you.; Create a after-trigger that just throws an exception if any rows are incoming for update. That way you can make sure that there really is no update.
– usr
Apr 16 '14 at 8:48
Can you execute next query and give us a resultselect count(*) from #TempData where IntMembNo in (select MEMBNO from TABLEX)
– veljasije
Apr 16 '14 at 8:56
@veljasije -select count(*) from #TempData where IntMembNo in (select MEMBNO from TABLEX)
reurns ZERO
– Mike
Apr 16 '14 at 12:52
|
show 5 more comments
I have some SQL within a stored procedure where I am updating a table based on another SELECT
statement from a temp table (code below).
SET NOCOUNT ON
DECLARE @RowCount int
UPDATE TABLEX SET
TRA = ISNULL (ir.DcTra, DCBASIC.TRA),
TRD = ISNULL(CAST(NULLIF(REPLACE(ir.DcTRD, '-', ''), '') AS datetime), DCBASIC.TRD),
LSINC = ISNULL(ir.DcLsInc, DCBASIC.LSINC),
REVSWOVR = ISNULL(ir.DcRevswovr, DCBASIC.REVSWOVR) FROM #TempData ir WHERE TABLEX.MEMBNO = ir.IntMembNo
SET @RowCount = @@ROWCOUNT
The @RowCount
variable is being set to 1.
The SELECT
of the #TempData table returns no rows and no rows in the TABLEX table are updated (or even exist) with the MembNo (I have added SELECT
statements within the sp to debug and they confirm this)
Why is @RowCount
being set to 1?
sql-server sql-server-2008 tsql
I have some SQL within a stored procedure where I am updating a table based on another SELECT
statement from a temp table (code below).
SET NOCOUNT ON
DECLARE @RowCount int
UPDATE TABLEX SET
TRA = ISNULL (ir.DcTra, DCBASIC.TRA),
TRD = ISNULL(CAST(NULLIF(REPLACE(ir.DcTRD, '-', ''), '') AS datetime), DCBASIC.TRD),
LSINC = ISNULL(ir.DcLsInc, DCBASIC.LSINC),
REVSWOVR = ISNULL(ir.DcRevswovr, DCBASIC.REVSWOVR) FROM #TempData ir WHERE TABLEX.MEMBNO = ir.IntMembNo
SET @RowCount = @@ROWCOUNT
The @RowCount
variable is being set to 1.
The SELECT
of the #TempData table returns no rows and no rows in the TABLEX table are updated (or even exist) with the MembNo (I have added SELECT
statements within the sp to debug and they confirm this)
Why is @RowCount
being set to 1?
sql-server sql-server-2008 tsql
sql-server sql-server-2008 tsql
edited Apr 16 '14 at 20:13
a_horse_with_no_name
300k46458550
300k46458550
asked Apr 16 '14 at 7:31
MikeMike
1,08141642
1,08141642
How do you know that no update was performed? Add:SELECT COUNT(*) FROM #TempData
.
– usr
Apr 16 '14 at 7:48
@usr - as I stated in my post, "(I have added SELECT statements within the sp to debug and they confirm this)"
– Mike
Apr 16 '14 at 8:07
Ok, did not see that statement. Are there triggers? To be clear: It is extremely unlikely that you have found a bug in SQL Server so the bug is with you.; Create a after-trigger that just throws an exception if any rows are incoming for update. That way you can make sure that there really is no update.
– usr
Apr 16 '14 at 8:48
Can you execute next query and give us a resultselect count(*) from #TempData where IntMembNo in (select MEMBNO from TABLEX)
– veljasije
Apr 16 '14 at 8:56
@veljasije -select count(*) from #TempData where IntMembNo in (select MEMBNO from TABLEX)
reurns ZERO
– Mike
Apr 16 '14 at 12:52
|
show 5 more comments
How do you know that no update was performed? Add:SELECT COUNT(*) FROM #TempData
.
– usr
Apr 16 '14 at 7:48
@usr - as I stated in my post, "(I have added SELECT statements within the sp to debug and they confirm this)"
– Mike
Apr 16 '14 at 8:07
Ok, did not see that statement. Are there triggers? To be clear: It is extremely unlikely that you have found a bug in SQL Server so the bug is with you.; Create a after-trigger that just throws an exception if any rows are incoming for update. That way you can make sure that there really is no update.
– usr
Apr 16 '14 at 8:48
Can you execute next query and give us a resultselect count(*) from #TempData where IntMembNo in (select MEMBNO from TABLEX)
– veljasije
Apr 16 '14 at 8:56
@veljasije -select count(*) from #TempData where IntMembNo in (select MEMBNO from TABLEX)
reurns ZERO
– Mike
Apr 16 '14 at 12:52
How do you know that no update was performed? Add:
SELECT COUNT(*) FROM #TempData
.– usr
Apr 16 '14 at 7:48
How do you know that no update was performed? Add:
SELECT COUNT(*) FROM #TempData
.– usr
Apr 16 '14 at 7:48
@usr - as I stated in my post, "(I have added SELECT statements within the sp to debug and they confirm this)"
– Mike
Apr 16 '14 at 8:07
@usr - as I stated in my post, "(I have added SELECT statements within the sp to debug and they confirm this)"
– Mike
Apr 16 '14 at 8:07
Ok, did not see that statement. Are there triggers? To be clear: It is extremely unlikely that you have found a bug in SQL Server so the bug is with you.; Create a after-trigger that just throws an exception if any rows are incoming for update. That way you can make sure that there really is no update.
– usr
Apr 16 '14 at 8:48
Ok, did not see that statement. Are there triggers? To be clear: It is extremely unlikely that you have found a bug in SQL Server so the bug is with you.; Create a after-trigger that just throws an exception if any rows are incoming for update. That way you can make sure that there really is no update.
– usr
Apr 16 '14 at 8:48
Can you execute next query and give us a result
select count(*) from #TempData where IntMembNo in (select MEMBNO from TABLEX)
– veljasije
Apr 16 '14 at 8:56
Can you execute next query and give us a result
select count(*) from #TempData where IntMembNo in (select MEMBNO from TABLEX)
– veljasije
Apr 16 '14 at 8:56
@veljasije -
select count(*) from #TempData where IntMembNo in (select MEMBNO from TABLEX)
reurns ZERO– Mike
Apr 16 '14 at 12:52
@veljasije -
select count(*) from #TempData where IntMembNo in (select MEMBNO from TABLEX)
reurns ZERO– Mike
Apr 16 '14 at 12:52
|
show 5 more comments
2 Answers
2
active
oldest
votes
Here is an explanation:
Statements that make a simple assignment always set the @@ROWCOUNT value to 1.
More information you can find here:
@@ROWCOUNT
My example:
CREATE DATABASE FirstDB
GO
USE FirstDB;
GO
CREATE TABLE Person (
personId INT IDENTITY PRIMARY KEY,
firstName varchar(20) ,
lastName varchar(20) ,
age int
)
INSERT INTO dbo.Person (firstName, lastName, age)
VALUES ('Nick', 'Smith', 30),
('Jack', 'South', 25),
('Garry', 'Perth', 20)
CREATE TABLE PersonAge (
personAgeId INT IDENTITY PRIMARY KEY ,
personId INT ,
newAge varchar(10)
)
INSERT INTO dbo.PersonAge(personId, newAge)
VALUES (1, 60),
(2, 65),
(3, 70)
ALTER TABLE dbo.PersonAge
ADD CONSTRAINT FK_PersonAgePerson FOREIGN KEY (personId)
REFERENCES dbo.Person (personId)
And then example of query:
USE FirstDB;
GO
SET NOCOUNT ON;
DECLARE @row int;
UPDATE Person
SET age = 40
FROM dbo.Person as p join dbo.PersonAge as p1
ON p.personId = p1.personId
WHERE p.age = 60
SET @row = @@ROWCOUNT
SELECT @row
I create an UPDATE
query where none of rows will be affected.
At the end @row consist 0 value.
1
Thanks @veljasije - which part of my UPDATE is a "simple assignment"? "Statements that make a simple assignment always set the @@ROWCOUNT value to 1. No rows are sent to the client. Examples of these statements are: SET local_variable, RETURN, READTEXT, and select without query statements such as SELECT GETDATE() or SELECT 'Generic Text'."
– Mike
Apr 16 '14 at 7:42
Thanks @veljasije - there was a rogueSET @Err = @@ERROR
between myUPDATE
statement and the setting of my variable. Amazing when someone else does code that works - it focussed your mind! Thanks again
– Mike
Apr 17 '14 at 8:13
add a comment |
Here is another example, using INSERT and DELETE--
DECLARE @deletedRows INT = 0;
SELECT @deletedRows = @@ROWCOUNT; --no previous DML statement
SELECT @deletedRows; --@@ROWCOUNT = 1 for a simple assignment
GO
DROP TABLE IF EXISTS #Test;
GO
CREATE TABLE #Test (ID INT IDENTITY, CurrentDate DATETIME DEFAULT GETDATE());
GO
INSERT #Test DEFAULT VALUES; --INSERT a single row
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 1
SELECT @deletedRows;
GO
DELETE FROM #Test WHERE 1=2; --no rows deleted
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 0
SELECT @deletedRows;
GO
DELETE TOP (1) t FROM #Test t WHERE 1=1; --1 row deleted
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 1
SELECT @deletedRows;
GO
DELETE TOP (1) t FROM #Test t WHERE 1=1; --no rows left to delete
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 0
SELECT @deletedRows;
GO
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
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: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
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%2fstackoverflow.com%2fquestions%2f23102805%2frowcount-returning-1-when-no-update-made%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Here is an explanation:
Statements that make a simple assignment always set the @@ROWCOUNT value to 1.
More information you can find here:
@@ROWCOUNT
My example:
CREATE DATABASE FirstDB
GO
USE FirstDB;
GO
CREATE TABLE Person (
personId INT IDENTITY PRIMARY KEY,
firstName varchar(20) ,
lastName varchar(20) ,
age int
)
INSERT INTO dbo.Person (firstName, lastName, age)
VALUES ('Nick', 'Smith', 30),
('Jack', 'South', 25),
('Garry', 'Perth', 20)
CREATE TABLE PersonAge (
personAgeId INT IDENTITY PRIMARY KEY ,
personId INT ,
newAge varchar(10)
)
INSERT INTO dbo.PersonAge(personId, newAge)
VALUES (1, 60),
(2, 65),
(3, 70)
ALTER TABLE dbo.PersonAge
ADD CONSTRAINT FK_PersonAgePerson FOREIGN KEY (personId)
REFERENCES dbo.Person (personId)
And then example of query:
USE FirstDB;
GO
SET NOCOUNT ON;
DECLARE @row int;
UPDATE Person
SET age = 40
FROM dbo.Person as p join dbo.PersonAge as p1
ON p.personId = p1.personId
WHERE p.age = 60
SET @row = @@ROWCOUNT
SELECT @row
I create an UPDATE
query where none of rows will be affected.
At the end @row consist 0 value.
1
Thanks @veljasije - which part of my UPDATE is a "simple assignment"? "Statements that make a simple assignment always set the @@ROWCOUNT value to 1. No rows are sent to the client. Examples of these statements are: SET local_variable, RETURN, READTEXT, and select without query statements such as SELECT GETDATE() or SELECT 'Generic Text'."
– Mike
Apr 16 '14 at 7:42
Thanks @veljasije - there was a rogueSET @Err = @@ERROR
between myUPDATE
statement and the setting of my variable. Amazing when someone else does code that works - it focussed your mind! Thanks again
– Mike
Apr 17 '14 at 8:13
add a comment |
Here is an explanation:
Statements that make a simple assignment always set the @@ROWCOUNT value to 1.
More information you can find here:
@@ROWCOUNT
My example:
CREATE DATABASE FirstDB
GO
USE FirstDB;
GO
CREATE TABLE Person (
personId INT IDENTITY PRIMARY KEY,
firstName varchar(20) ,
lastName varchar(20) ,
age int
)
INSERT INTO dbo.Person (firstName, lastName, age)
VALUES ('Nick', 'Smith', 30),
('Jack', 'South', 25),
('Garry', 'Perth', 20)
CREATE TABLE PersonAge (
personAgeId INT IDENTITY PRIMARY KEY ,
personId INT ,
newAge varchar(10)
)
INSERT INTO dbo.PersonAge(personId, newAge)
VALUES (1, 60),
(2, 65),
(3, 70)
ALTER TABLE dbo.PersonAge
ADD CONSTRAINT FK_PersonAgePerson FOREIGN KEY (personId)
REFERENCES dbo.Person (personId)
And then example of query:
USE FirstDB;
GO
SET NOCOUNT ON;
DECLARE @row int;
UPDATE Person
SET age = 40
FROM dbo.Person as p join dbo.PersonAge as p1
ON p.personId = p1.personId
WHERE p.age = 60
SET @row = @@ROWCOUNT
SELECT @row
I create an UPDATE
query where none of rows will be affected.
At the end @row consist 0 value.
1
Thanks @veljasije - which part of my UPDATE is a "simple assignment"? "Statements that make a simple assignment always set the @@ROWCOUNT value to 1. No rows are sent to the client. Examples of these statements are: SET local_variable, RETURN, READTEXT, and select without query statements such as SELECT GETDATE() or SELECT 'Generic Text'."
– Mike
Apr 16 '14 at 7:42
Thanks @veljasije - there was a rogueSET @Err = @@ERROR
between myUPDATE
statement and the setting of my variable. Amazing when someone else does code that works - it focussed your mind! Thanks again
– Mike
Apr 17 '14 at 8:13
add a comment |
Here is an explanation:
Statements that make a simple assignment always set the @@ROWCOUNT value to 1.
More information you can find here:
@@ROWCOUNT
My example:
CREATE DATABASE FirstDB
GO
USE FirstDB;
GO
CREATE TABLE Person (
personId INT IDENTITY PRIMARY KEY,
firstName varchar(20) ,
lastName varchar(20) ,
age int
)
INSERT INTO dbo.Person (firstName, lastName, age)
VALUES ('Nick', 'Smith', 30),
('Jack', 'South', 25),
('Garry', 'Perth', 20)
CREATE TABLE PersonAge (
personAgeId INT IDENTITY PRIMARY KEY ,
personId INT ,
newAge varchar(10)
)
INSERT INTO dbo.PersonAge(personId, newAge)
VALUES (1, 60),
(2, 65),
(3, 70)
ALTER TABLE dbo.PersonAge
ADD CONSTRAINT FK_PersonAgePerson FOREIGN KEY (personId)
REFERENCES dbo.Person (personId)
And then example of query:
USE FirstDB;
GO
SET NOCOUNT ON;
DECLARE @row int;
UPDATE Person
SET age = 40
FROM dbo.Person as p join dbo.PersonAge as p1
ON p.personId = p1.personId
WHERE p.age = 60
SET @row = @@ROWCOUNT
SELECT @row
I create an UPDATE
query where none of rows will be affected.
At the end @row consist 0 value.
Here is an explanation:
Statements that make a simple assignment always set the @@ROWCOUNT value to 1.
More information you can find here:
@@ROWCOUNT
My example:
CREATE DATABASE FirstDB
GO
USE FirstDB;
GO
CREATE TABLE Person (
personId INT IDENTITY PRIMARY KEY,
firstName varchar(20) ,
lastName varchar(20) ,
age int
)
INSERT INTO dbo.Person (firstName, lastName, age)
VALUES ('Nick', 'Smith', 30),
('Jack', 'South', 25),
('Garry', 'Perth', 20)
CREATE TABLE PersonAge (
personAgeId INT IDENTITY PRIMARY KEY ,
personId INT ,
newAge varchar(10)
)
INSERT INTO dbo.PersonAge(personId, newAge)
VALUES (1, 60),
(2, 65),
(3, 70)
ALTER TABLE dbo.PersonAge
ADD CONSTRAINT FK_PersonAgePerson FOREIGN KEY (personId)
REFERENCES dbo.Person (personId)
And then example of query:
USE FirstDB;
GO
SET NOCOUNT ON;
DECLARE @row int;
UPDATE Person
SET age = 40
FROM dbo.Person as p join dbo.PersonAge as p1
ON p.personId = p1.personId
WHERE p.age = 60
SET @row = @@ROWCOUNT
SELECT @row
I create an UPDATE
query where none of rows will be affected.
At the end @row consist 0 value.
edited Apr 16 '14 at 20:12
answered Apr 16 '14 at 7:36
veljasijeveljasije
3,98273967
3,98273967
1
Thanks @veljasije - which part of my UPDATE is a "simple assignment"? "Statements that make a simple assignment always set the @@ROWCOUNT value to 1. No rows are sent to the client. Examples of these statements are: SET local_variable, RETURN, READTEXT, and select without query statements such as SELECT GETDATE() or SELECT 'Generic Text'."
– Mike
Apr 16 '14 at 7:42
Thanks @veljasije - there was a rogueSET @Err = @@ERROR
between myUPDATE
statement and the setting of my variable. Amazing when someone else does code that works - it focussed your mind! Thanks again
– Mike
Apr 17 '14 at 8:13
add a comment |
1
Thanks @veljasije - which part of my UPDATE is a "simple assignment"? "Statements that make a simple assignment always set the @@ROWCOUNT value to 1. No rows are sent to the client. Examples of these statements are: SET local_variable, RETURN, READTEXT, and select without query statements such as SELECT GETDATE() or SELECT 'Generic Text'."
– Mike
Apr 16 '14 at 7:42
Thanks @veljasije - there was a rogueSET @Err = @@ERROR
between myUPDATE
statement and the setting of my variable. Amazing when someone else does code that works - it focussed your mind! Thanks again
– Mike
Apr 17 '14 at 8:13
1
1
Thanks @veljasije - which part of my UPDATE is a "simple assignment"? "Statements that make a simple assignment always set the @@ROWCOUNT value to 1. No rows are sent to the client. Examples of these statements are: SET local_variable, RETURN, READTEXT, and select without query statements such as SELECT GETDATE() or SELECT 'Generic Text'."
– Mike
Apr 16 '14 at 7:42
Thanks @veljasije - which part of my UPDATE is a "simple assignment"? "Statements that make a simple assignment always set the @@ROWCOUNT value to 1. No rows are sent to the client. Examples of these statements are: SET local_variable, RETURN, READTEXT, and select without query statements such as SELECT GETDATE() or SELECT 'Generic Text'."
– Mike
Apr 16 '14 at 7:42
Thanks @veljasije - there was a rogue
SET @Err = @@ERROR
between my UPDATE
statement and the setting of my variable. Amazing when someone else does code that works - it focussed your mind! Thanks again– Mike
Apr 17 '14 at 8:13
Thanks @veljasije - there was a rogue
SET @Err = @@ERROR
between my UPDATE
statement and the setting of my variable. Amazing when someone else does code that works - it focussed your mind! Thanks again– Mike
Apr 17 '14 at 8:13
add a comment |
Here is another example, using INSERT and DELETE--
DECLARE @deletedRows INT = 0;
SELECT @deletedRows = @@ROWCOUNT; --no previous DML statement
SELECT @deletedRows; --@@ROWCOUNT = 1 for a simple assignment
GO
DROP TABLE IF EXISTS #Test;
GO
CREATE TABLE #Test (ID INT IDENTITY, CurrentDate DATETIME DEFAULT GETDATE());
GO
INSERT #Test DEFAULT VALUES; --INSERT a single row
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 1
SELECT @deletedRows;
GO
DELETE FROM #Test WHERE 1=2; --no rows deleted
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 0
SELECT @deletedRows;
GO
DELETE TOP (1) t FROM #Test t WHERE 1=1; --1 row deleted
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 1
SELECT @deletedRows;
GO
DELETE TOP (1) t FROM #Test t WHERE 1=1; --no rows left to delete
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 0
SELECT @deletedRows;
GO
add a comment |
Here is another example, using INSERT and DELETE--
DECLARE @deletedRows INT = 0;
SELECT @deletedRows = @@ROWCOUNT; --no previous DML statement
SELECT @deletedRows; --@@ROWCOUNT = 1 for a simple assignment
GO
DROP TABLE IF EXISTS #Test;
GO
CREATE TABLE #Test (ID INT IDENTITY, CurrentDate DATETIME DEFAULT GETDATE());
GO
INSERT #Test DEFAULT VALUES; --INSERT a single row
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 1
SELECT @deletedRows;
GO
DELETE FROM #Test WHERE 1=2; --no rows deleted
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 0
SELECT @deletedRows;
GO
DELETE TOP (1) t FROM #Test t WHERE 1=1; --1 row deleted
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 1
SELECT @deletedRows;
GO
DELETE TOP (1) t FROM #Test t WHERE 1=1; --no rows left to delete
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 0
SELECT @deletedRows;
GO
add a comment |
Here is another example, using INSERT and DELETE--
DECLARE @deletedRows INT = 0;
SELECT @deletedRows = @@ROWCOUNT; --no previous DML statement
SELECT @deletedRows; --@@ROWCOUNT = 1 for a simple assignment
GO
DROP TABLE IF EXISTS #Test;
GO
CREATE TABLE #Test (ID INT IDENTITY, CurrentDate DATETIME DEFAULT GETDATE());
GO
INSERT #Test DEFAULT VALUES; --INSERT a single row
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 1
SELECT @deletedRows;
GO
DELETE FROM #Test WHERE 1=2; --no rows deleted
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 0
SELECT @deletedRows;
GO
DELETE TOP (1) t FROM #Test t WHERE 1=1; --1 row deleted
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 1
SELECT @deletedRows;
GO
DELETE TOP (1) t FROM #Test t WHERE 1=1; --no rows left to delete
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 0
SELECT @deletedRows;
GO
Here is another example, using INSERT and DELETE--
DECLARE @deletedRows INT = 0;
SELECT @deletedRows = @@ROWCOUNT; --no previous DML statement
SELECT @deletedRows; --@@ROWCOUNT = 1 for a simple assignment
GO
DROP TABLE IF EXISTS #Test;
GO
CREATE TABLE #Test (ID INT IDENTITY, CurrentDate DATETIME DEFAULT GETDATE());
GO
INSERT #Test DEFAULT VALUES; --INSERT a single row
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 1
SELECT @deletedRows;
GO
DELETE FROM #Test WHERE 1=2; --no rows deleted
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 0
SELECT @deletedRows;
GO
DELETE TOP (1) t FROM #Test t WHERE 1=1; --1 row deleted
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 1
SELECT @deletedRows;
GO
DELETE TOP (1) t FROM #Test t WHERE 1=1; --no rows left to delete
DECLARE @deletedRows INT = @@ROWCOUNT; --@@ROWCOUNT = 0
SELECT @deletedRows;
GO
edited Nov 25 '18 at 4:21
answered Nov 25 '18 at 4:13
GraemeGraeme
828912
828912
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- 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%2fstackoverflow.com%2fquestions%2f23102805%2frowcount-returning-1-when-no-update-made%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
How do you know that no update was performed? Add:
SELECT COUNT(*) FROM #TempData
.– usr
Apr 16 '14 at 7:48
@usr - as I stated in my post, "(I have added SELECT statements within the sp to debug and they confirm this)"
– Mike
Apr 16 '14 at 8:07
Ok, did not see that statement. Are there triggers? To be clear: It is extremely unlikely that you have found a bug in SQL Server so the bug is with you.; Create a after-trigger that just throws an exception if any rows are incoming for update. That way you can make sure that there really is no update.
– usr
Apr 16 '14 at 8:48
Can you execute next query and give us a result
select count(*) from #TempData where IntMembNo in (select MEMBNO from TABLEX)
– veljasije
Apr 16 '14 at 8:56
@veljasije -
select count(*) from #TempData where IntMembNo in (select MEMBNO from TABLEX)
reurns ZERO– Mike
Apr 16 '14 at 12:52