【发布时间】:2011-10-12 23:12:37
【问题描述】:
我要做的就是将一个变量设置为受事务影响的行数并将其发送到表中。我不知道为什么会遇到问题,但这是我的代码
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。
为什么会这样,我该如何解决?
如果我更改代码并在Set @RowCount = @@rowcount 之前添加Select @@ROWCOUNT,那么它可以选择它,但我仍然希望它在一个变量中。
答案:我猜是@@ROWCOUNT 的情况,我使用的是@@Rowcount,它想要@@ROWCOUNT。
【问题讨论】:
-
当你正常运行那个 SELECT 语句时,你返回了多少行?
-
大约 1000 行...那么我的代码设置是否正确?
-
Exec usp_myDashboardInsert 'PreCall_ECH', @@Rowcount, @errDate, @duration肯定 将不起作用,因为@@ROWCOUNT的值将被中间语句重置。 -
好的,谢谢,我在阅读/研究中是这么认为的,但是当我将它设置为变量时,它就不能正常工作了......应该是对的?
-
@CodingIsAwesome - 是的。在
insert的结尾和变量赋值之间根本没有任何其他语句?
标签: sql sql-server-2005 sql-server-2008 rowcount