2011-09-28 54 views
0

我有這樣的語句:SQL DELETE語句的問題與返回的行數

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

如果我從代碼(傳統的ASP)運行它,我得到錯誤:Item cannot be found in the collection corresponding to the requested name or ordinal.

數據庫是SQL Server 2005中表現。

如果我在查詢分析器中運行此行它工作!

的專欄中,我是指具有在數據庫

做你們知道在哪裏STAT尋找判明約束到另一個表?

更新 - 請儘量解釋現在

第一線,我們有正規的服務器上,當我們需要的代碼與2005年的SQL上傳到一個新的服務器的連接字符串表達我們換了第二個導致第一個沒有爲我們工作(我嘗試在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**;" 
+0

你可以發佈ASP代碼,這個錯誤通常意味着在查詢中回來的數據中找不到字段 – Sparky

+0

我不能這樣做,因爲它是很多函數和類的一部分。無論如何,我試圖回顧@@ rowcount(沒有作爲部分),所以它將只是0列,但沒有工作 –

回答

1

添加SET NOCOUNT ON;如無則返回另一個記錄導致該問題

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

我試過,然後我得到對象需要 –

+0

顯示確切的asp代碼。 –

+0

這是什麼執行:returnedValue = m_Conn.Execute(strSql).NextRecordset.Fields(strReturnedValueName).Value所以它會執行並且不會返回值(此代碼在我們的數百個網站中工作,但現在在一個新的服務器上它不是正在工作 –

0

@@行數是T-SQL調用只能從數據庫中運行。你可以在存儲過程中實例化它,然後調用delete並從存儲過程中返回@@ rowcount。

這是ASP.NET但不是在頁面加載書面方式這只是處理它在頭

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

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 
1

如果要算受影響的行數,你可以用這個來代替:

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

Response.Write rows_affected 
+0

只要連接對象的CursorType設置爲AdOpenKeyset,這就可以工作。 –