返回rowcount的SQL DELETE STATEMENT问题

时间:2011-09-28 05:00:28

标签: asp-classic sql-server-2005-express

我有这样的陈述:

DELETE TABLENAME WHERE COLUMN = NUMBER; SELECT @@ROWCOUNT AS RC;

如果我从代码(经典asp)运行它,我会得到错误:Item cannot be found in the collection corresponding to the requested name or ordinal.

DB是sql server 2005 express。

如果我在查询分析器中运行此行,它可以工作!

我引用的列对db

中的另一个表有约束

你们知道在哪里寻找修复它吗?

更新 - 请尝试现在解释

第一行是我们在常规服务器上的连接字符串,当我们需要将代码上传到新服务器时使用sql 2005 express我们改为第二行导致第一行不适用于我们(i尝试在servername本地IP:127.0.0.1),第二个是实际的服务器名称。现在我已经改变了第一个连接到服务器名称,它的工作原理。甚至删除和撤销@@ rowcount。 现在感觉连接速度较慢,因此网站运行缓慢!

任何让它变得更好的想法?

ConnectionString =  "Server=**ServerName**;Driver={SQL Server};UID=**Username**; PWD=**password**;database=**dbname**;Data Provider=SQLOLEDB;Network Library=DBMSSOCN;"

ConnectionString = "PROVIDER=SQLOLEDB; Data Source =**servername**; Trusted_Connection=Yes; Initial Catalog=**dbname**;User Id=**username**; Password=**password**;"

4 个答案:

答案 0 :(得分:1)

添加SET NOCOUNT ON;,而不是返回另一个记录集导致问题

SET NOCOUNT ON;DELETE TABLENAME WHERE COLUMN = NUMBER; SELECT @@ROWCOUNT AS RC;

答案 1 :(得分:1)

如果您想计算受影响的行数,可以改用:

conn.Execute("DELETE FROM TABLENAME WHERE COLUMN = " & number, rows_affected)

Response.Write rows_affected

答案 2 :(得分:0)

@@ Rowcount是一个只能从数据库运行的T-SQL调用。您可以在存储过程中实例化它,然后调用delete并从存储过程中返回@@ rowcount。

这适用于ASP.NET,但不是在页面加载中写入,而是在标题中处理它

http://support.microsoft.com/kb/306574

答案 3 :(得分:0)

此代码假定查询中有两个记录集,第一个可能是行计数(为什么人们建议使用SET NOCOUNT ON)。

m_Conn.Execute(strSql).NextRecordset.Fields(strReturnedValueName).Value 

因此它将执行而不返回值(此代码适用于我们的数百个网站,但现在在新服务器上无法正常工作 -

当您在此服务器上运行代码时,它是否显示行数?如果没有,那么某些内容正在启用NOCOUNT,因此您的ASP代码无法获得预期数量的记录集对象。我不是假设你总是得到两个记录集,而是循环记录集,直到返回的记录集为空,沿着这些行。下面的代码没有经过测试,它基本上抓住了每个记录集中的第一个字段,直到最后一个字段。这样,无论NOCOUNT的设置如何,您都应该始终从最终的SQL语句中获取值

DIM rs 
set rs=Server.CreateObject("ADODB.recordset")
set rs = m_Conn.Execute(strSql)
do while rs is not nothing
  val = rs(0).value
  rs = rs.NextRecordSet
enddo