dth*_*her 83 sql t-sql sql-server oracle plsql
对于INSERT
,UPDATE
和DELETE
SQL直接对数据库执行的语句,大多数数据库提供商返回受影响的行数.对于存储过程,受影响的记录数始终为-1
.
我们如何获得受存储过程影响的记录数?
OMG*_*ies 79
注册存储过程的out参数,并根据@@ROWCOUNT
是否使用SQL Server 设置值.使用SQL%ROWCOUNT
,如果你使用的是Oracle.
请注意,如果您有多个INSERT/UPDATE/DELETE
,则需要一个变量来存储@@ROWCOUNT
每个操作的结果.
Raj*_*ore 44
@@RowCount
将为您提供受SQL语句影响的记录数.
该@@RowCount
作品只有当你发出它随即.因此,如果要捕获错误,则必须在同一行上执行此操作.如果你把它拆开,你会错过你放在第二位的那个.
SELECT @NumRowsChanged = @@ROWCOUNT, @ErrorCode = @@ERROR
Run Code Online (Sandbox Code Playgroud)
如果您有多个语句,则必须捕获每个语句受影响的行数并将其添加.
SELECT @NumRowsChanged = @NumRowsChanged + @@ROWCOUNT, @ErrorCode = @@ERROR
Run Code Online (Sandbox Code Playgroud)
Dud*_*lou 30
事实证明,这SET NOCOUNT ON
是在存储过程脚本中设置的(默认情况下在SQL Server Management Studio上)并且SqlCommand.ExecuteNonQuery();
始终返回-1.
我把它关掉了:SET NOCOUNT OFF
无需使用@@ROWCOUNT
.
更多详细信息,请参见:SqlCommand.ExecuteNonQuery()在执行Insert/Update/Delete时返回-1
归档时间: |
|
查看次数: |
144809 次 |
最近记录: |