没有UPDATE时,@@ ROWCOUNT返回1

时间:2014-04-16 07:32:00

标签: sql-server sql-server-2008 tsql

我在存储过程中有一些SQL,我根据临时表中的另一个SELECT语句更新表(下面的代码)。

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 

@RowCount变量设置为1。

#TempData表的SELECT不返回任何行,并且使用MembNo更新(甚至不存在)TABLEX表中的任何行(我在sp中添加了SELECT语句来调试和他们证实了这一点)

为什么@RowCount被设置为1?

2 个答案:

答案 0 :(得分:3)

以下是解释:

Statements that make a simple assignment always set the @@ROWCOUNT value to 1.

您可以在此处找到更多信息:

@@ROWCOUNT

我的例子:

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)

然后查询的例子:

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

我创建了一个UPDATE查询,其中没有任何行会受到影响。

最后@row包含0值。

答案 1 :(得分:0)

这是另一个示例,使用INSERT和DELETE-

pricing