我在存储过程中有一些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?
答案 0 :(得分:3)
以下是解释:
Statements that make a simple assignment always set the @@ROWCOUNT value to 1.
您可以在此处找到更多信息:
我的例子:
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