我想要做的就是将一个变量设置为受事务影响的行数,并将其发送到表中。我不知道为什么我遇到麻烦,但这是我的代码
Begin
Declare @errDate datetime
Declare @RowCount nvarchar(10)
Declare @Message nvarchar(max)
Declare @startproc datetime
Declare @endproc datetime
Declare @duration int
set @startproc = getdate()
Declare @myDate Datetime
Set @myDate = CAST(CONVERT(varchar,getdate()-1, 112) +' ' +'00:00 AM'AS DATETIME)
DELETE FROM [Cal_CommOps].[dbo].[Progression_PreCall_CaliforniaECH]
Where segStart_date = @myDate
INSERT INTO [Cal_CommOps].[dbo].[Progression_PreCall_CaliforniaECH]
([callid]
,[segstart_date]
,[dialed_num]
,[origlogin]
,[duration])
SELECT *
FROM (
Select callid,
CAST ([SEGSTART_D] as datetime) as segstart_date,
RIGHT(dialed_num, 10) as dialed_num,
origlogin,
duration
FROM [CMS_ECH] ECH
Inner join [Cal_CommOps].[dbo].[CommOps_Emp] EMP on EMP.extension = ECH.origlogin
AND Dept in ('Pre-Call')
Where [SEGSTART_D] = @myDate and dialed_num <> ''
UNION
Select callid,
CAST ([SEGSTART_D] as datetime) as segstart_date,
RIGHT(calling_pty, 10) as dialed_num,
anslogin,
duration
FROM [CMS_ECH] ECH
Inner join [Cal_CommOps].[dbo].[CommOps_Emp] EMP on EMP.extension = ECH.anslogin
AND Dept in ('Pre-Call')
Where [SEGSTART_D] = @myDate and calling_pty <> ''
) as myCalls
Set @RowCount = @@rowcount
Set @endproc = getdate()
Set @duration = DATEDIFF(minute, @startproc, @endproc)
Set @errDate = getdate()
Exec usp_myDashboardInsert 'PreCall_ECH', @@Rowcount, @errDate, @duration
End
即使我尝试
Exec usp_myDashboardInsert 'PreCall_ECH', @Rowcount, @errDate, @duration
我仍然得到1。
为什么会这样,我该如何解决?
如果我更改代码并在Select @@ROWCOUNT
之前添加Set @RowCount = @@rowcount
,则可以选择它,但我仍然希望它在变量中。
答案:我想是@@ ROWCOUNT的情况我使用的是@@ Rowcount,它想要@@ ROWCOUNT。
答案 0 :(得分:1)
乍一看我没有看到这个问题。我确实创建了一个简单的测试,它似乎工作正常。运行下面的示例进行健全性检查,看看它是否返回2?如果您在没有插入的情况下运行您的选择,您确定它会返回超过1行吗?
http://technet.microsoft.com/en-us/library/ms187316.aspx
CREATE TABLE #Test(id INT, FirstName VARCHAR(MAX))
DECLARE @RowCount nvarchar(10)
INSERT INTO #Test(id,FirstName)
SELECT *
FROM (SELECT 1 as id, 'Fred' as FirstName
UNION
SELECT 2,'Dora') as People
SET @RowCount = @@rowcount
SELECT @RowCount
更新:
问题是你的电话
Exec usp_myDashboardInsert 'PreCall_ECH', @@Rowcount, @errDate, @duration
你做@@ RowCount而不是@RowCount。你在proc中的@@ RowCount给出Set @errDate = getdate()
您需要将proc输入参数更改为@RowCount。
在你的问题中,我认为过程中的一个额外的东西是你投入的,以使你的观点不是真正让你疯狂的部分。这意味着插入后的@@ RowCount将包含正确的值。
答案 1 :(得分:1)
这肯定会不工作:
Exec usp_myDashboardInsert 'PreCall_ECH', @@Rowcount, @errDate, @duration
因为@@ Rowcount被赋值语句设置为1。因此,第一步是将代码更改为此并坚持下去:
Exec usp_myDashboardInsert 'PreCall_ECH', @Rowcount, @errDate, @duration
如果这仍然没有给出预期结果,您可能会发现您的查询逻辑意外地选择了1行,如@ StarShip3000建议的那样。
答案 2 :(得分:0)
原来是@@ Rowcount的情况,必须是@@ ROWCOUNT