2

我要做的就是将一个变量设置为受事务影响的行数并将其发送到表中。我不知道为什么我遇到了麻烦,但这是我的代码

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。

4

3 回答 3

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。

在您向我提出的问题中,我认为 proc 调用是您投入的额外内容,以表明您的观点不是让您疯狂的实际部分。这意味着插入后的 @@RowCount 将包含正确的值。

于 2011-10-12T23:28:31.110 回答
1

这绝对行不通

Exec usp_myDashboardInsert 'PreCall_ECH', @@Rowcount, @errDate, @duration

因为 @@Rowcount 被赋值语句设置为 1。因此,第一步是将您的代码更改为此并坚持下去:

Exec usp_myDashboardInsert 'PreCall_ECH', @Rowcount, @errDate, @duration

如果这仍然没有给您预期的结果,您可能会发现您的查询逻辑意外地选择了 1 行,正如@StarShip3000 所建议的那样。

于 2011-10-12T23:37:55.227 回答
0

原来是@@Rowcount 的情况,一定是@@ROWCOUNT

于 2011-10-12T23:50:15.367 回答