2013-05-14 79 views
0

我需要從一個asp頁面調用我在SQL 2008中存儲的過程,並向它傳遞兩個值,並在最後返回兩個變量的計數。在經典的asp中執行存儲過程並返回值

這是存儲過程我有:

 /****** STUDATATAB******/ 
CREATE PROCEDURE StdntReconcileDups @NewSTDNT int = NULL, @OldSTDNT int = NULL output 
AS 
--use ZLDP01RD; 
--count = 9 rows 
Select count (*) from STUDATA.dbo.STUDATATAB 
where STDNT = @NewSTDNT; 

-- count = 576 rows 
select count(*) from STUDATA.dbo.STUDATATAB 
where STDNT = @OldSTDNT; 

-- select duplicate keys with new student# count = 3 rows 
select a.STDNT,a.crs,a.CRS_VRSN,a.QSTN,a.SCR 
    from STUDATA.dbo.STUDATATABa, STUDATA.dbo.STUDATATABb 
     where a.STDNT = @NewSTDNT 
     and b.STDNT = @OldSTDNT 
     and a.crs = b.crs 
     and a.CRS_VRSN=b.CRS_VRSN 
     and a.QSTN=b.QSTN 
     and a.SCR=b.SCR 

-- select duplicate keys with new student# count = 3 rows 
select count (*) 
    from STUDATA.dbo.STUDATATABa 
    where exists (select 1 from STUDATA.dbo.STUDATATABb 
        where a.STDNT = @NewSTDNT 
         and b.STDNT = @OldSTDNT 
         and a.crs = b.crs 
         and a.CRS_VRSN=b.CRS_VRSN 
         and a.QSTN=b.QSTN 
         and a.SCR=b.SCR); 


-- delete duplicate keys with new student# 3 rows deleted 
WITH STUDENT_CTE 
    AS 
    (select a.* 
    from STUDATA.dbo.STUDATATABa 
    where exists (select 1 from STUDATA.dbo.STUDATATABb 
        where a.STDNT = @NewSTDNT 
         and b.STDNT = @OldSTDNT 
         and a.crs = b.crs 
         and a.CRS_VRSN=b.CRS_VRSN 
         and a.QSTN=b.QSTN 
         and a.SCR=b.SCR)) 
delete from STUDENT_CTE; 

--Convert student #10826 history records to student #123196, should update 579 rows 
UPDATE STUDATA.dbo.STUDATATAB 
SET STDNT = @NewSTDNT, LSTUPDT_USER_ID_CD = 'DFERN', LSTUPDT_TS = getDate() 
where STDNT = @OldSTDNT; 

-- count= 582 
select count(*) from STUDATA.dbo.STUDATATAB 
where STDNT = @NewSTDNT; 

-- count= 0 
Select count(*) from STUDATA.dbo.STUDATATAB 
where STDNT = @OldSTDNT; 
go 

我想插入代碼中,如果參數,所以它調用StdntReconcileDups並傳遞給它KeepSTDNT的價值觀和RemoveSTDNT

Dim DBConn ' Connection object 
If Request.Form("Action") = "Go!" then 


Endif 
+0

是@OldStdnt意思是一個iput或輸出參數 – 2013-05-15 06:09:55

回答

0

如果我得到你的意思......然後做象下面這樣:

SqlConnection con = new SqlConnection("Data Source= ; initial catalog= Northwind ; User Id= ; Password= '"); 

     con.open(); 

創建的SqlConnection後,您將創建StoredProcedure的象下面這樣:

 CREATE PROCEDURE RegionUpdate (@RegionID INTEGER,@RegionDescription NCHAR(50)) AS 
     SET NOCOUNT OFF 
     UPDATE Region 
     SET RegionDescription = @RegionDescription 

創建一個SqlCommand對象參數作爲要執行的存儲過程的名稱以及命令將發送到的連接對象con來執行。

 SqlCommand command = new SqlCommand("RegionUpdate",con); 

更改命令對象命令類型存儲過程屬性

command.CommandType = CommandType.StoredProcedure; 

使用Parameters集合和SqlParameter類將參數添加到命令對象中。

 command.Parameters.Add(new SqlParameter("@RegionID",SqlDbType.Int,0,"RegionID")); 

     command.Parameters.Add(new SqlParameter("@RegionDescription",SqlDbType.NChar,50,"RegionDescription")); 

使用參數

 command.Parameters[0].Value=4; 

     command.Parameters[1].Value="SouthEast"; 

Excecute使用它返回由存儲過程實現的行數Exec​​uteNonQuery方法存儲過程的Value屬性指定的參數的值。

  int i=command.ExecuteNonQuery(); 

上面的代碼是正確的方式...你可以代替@KeepSTDNT@RemoveSTDNT的正好代替@RegionID@RegionDescription ...我已經用它自己。 ..如果你想更多的幫助...告訴然後

0

這個概念就是在執行你的請求......你將得到一個你將遍歷的記錄集,直到你到達eof ...然後你將調用下一個記錄集來獲得下一個結果。

...你在找這樣的東西嗎?

connectstring = "..." 
sql = "StdntReconcileDups '" & NewSTDNT & "','" & OldSTDNT & "'" 
set rs = Server.CreateObject("ADODB.RecordSet") 

rs.Open sql, connectstring, 3 
+0

這不是我正在尋找。 SQL編輯所有我需要的數據是一種使用KeepSTDNT和RemoveSTDNT值運行的方法 – user2381979 2013-05-14 17:37:48