當前位置:首頁 » 存儲配置 » sql2005執行存儲過程

sql2005執行存儲過程

發布時間: 2022-07-20 18:34:51

『壹』 sql server2005 上怎麼「單步執行存儲過程」

exec
存儲過程

@參數
逐語句調試:快捷鍵
F11

逐過程調試:快捷鍵
F10

『貳』 sql server2005怎麼調試存儲過程

執行存儲過程 在存儲過程中 print 相關信息,就可以進行調試了
請採納!

『叄』 執行SQL2005資料庫存儲過程有錯誤誰會啊

這個存儲過程[dbo].[GSP_GR_EfficacyUserID] ,需要@dwUserID這個參數呀


你語句或許需要修改一下:

USE[QPEcateDB]
GO

DECLARE @return_valueint,
@strErrorDescribenvarchar(127)

EXEC @return_value=[dbo].[GSP_GR_EfficacyUserID]
@dwUserID='用戶ID'
,@strErrorDescribe=@strErrorDescribeOUTPUT

SELECT @strErrorDescribeasN'@strErrorDescribe'

SELECT 'ReturnValue'=@return_value

GO

『肆』 在sql2005資料庫執行存儲過程出現:關鍵字 'SET' 附近有語法錯誤。 怎麼處理呀代碼如下

換成

CREATE proc [dbo].[GetDataSet]
@TableList Varchar(1024)='*',--搜索表的欄位,比如:』id,datatime,job『,用逗號隔開
@TableName Varchar(100), --搜索的表名
@SelectWhere Varchar(1024)='',--搜索條件,這里不用寫where,比如:job=』teacher『and class='2'
@SelectOrderId Varchar(50),--表主鍵欄位名。比如:id
@SelectOrder Varchar(200)='', --排序,可以使用多欄位排序但主鍵欄位必需在最前面.也可以不寫,比如:order by class asc
@intPageNo int=1, --頁號
@intPageSize int=10 ,--每頁顯示數
@RecordCount int OUTPUT --總記錄數(存儲過程輸出參數)
as
declare @TmpSelect NVarchar(4000)
declare @Tmp NVarchar(4000)
declare @pagecount int
set nocount on--關閉計數
set @RecordCount=0
set @TmpSelect = 'select @RecordCount=count(*) from '+@TableName+' where '+@SelectWhere
execute sp_executesql
@TmpSelect, --執行上面的sql語句
N'@RecordCount int OUTPUT' , --執行輸出數據的sql語句,output出總記錄數
@RecordCount OUTPUT
if (@RecordCount = 0) --如果沒有貼子,則返回零
return 0
set @pagecount = @RecordCount/@intPageSize
if(@RecordCount%@intPageSize>0)
set @pagecount=@pagecount+1
if(@pagecount<=0)
set @pagecount=1
if(@intPageNo>@pagecount)
set @intPageNo=@pagecount
/*判斷頁數是否正確*/
--if (@intPageNo - 1) * @intPageSize > @RecordCount --頁號大於總頁數,返回錯誤
--set @intPageNo=@pagecount
set nocount off--打開計數
if @SelectWhere != ''
begin
set @TmpSelect = 'select top '+str(@intPageSize)+' '+@TableList+' from '+@TableName+' where '+@SelectOrderId+' not in(select top '+str((@intPageNo-1)*@intPageSize)+' '+@SelectOrderId+' from '+@TableName+' where '+@SelectWhere +' '+@SelectOrder+') and '+@SelectWhere +' '+@SelectOrder
end
else
begin
set @TmpSelect = 'select top '+str(@intPageSize)+' '+@TableList+' from '+@TableName+' where '+@SelectOrderId+' not in(select top '+str((@intPageNo-1)*@intPageSize)+' '+@SelectOrderId+' from '+@TableName+''+@SelectOrder+') '+@SelectOrder
end
execute sp_executesql @TmpSelect
return(@@rowcount)
GO

『伍』 sqlserver2005如何通過作業調用存儲過程

哈哈,我弄過的,操作步驟如下:
SQL
Server代理
--右鍵作業
--新建作業
--"常規"項中輸入作業名稱
--"步驟"項
--新建
--"步驟名"中輸入步驟名
--"類型"中選擇"Transact-SQL
腳本(TSQL)"
--"資料庫"選擇執行命令的資料庫
--"命令"中輸入要執行的語句:
exec
P_test
--確定
--"計劃"項
--新建
--"名稱"中輸入調度名稱
--"調度類型"中選擇你的作業執行安排
--如果選擇"反復出現"
--點"更改"來設置你的時間安排
然後將SQL
Agent服務啟動,並設置為自動啟動,否則你的作業不會被執行

『陸』 SQLserver2005定時執行存儲過程

先對你的問題進行分析:
你現在又2類時間欄位,一個是系統時間T1,一個是你插入表的時間T2(T2可能是一系列時間值),然後將T1分別和T2系列時間值判斷,要是T1>T2了,就開始執行你寫的存儲過程。
顯示是可以顯示,但是可能會讓SQL資料庫佔用很多內存,應為你要隨時判斷T1的時間和T2的時間的大小關系。
解決方案:你可以用SQL2005寫個ETL(SSIS),然後系統每1分鍾或者5分鍾、10分鍾去執行該ETL。ETL的大致思路就是定義2個變數,一個是T1系統時間,一個是T2獲取你插入表的時間,然後根據你的實際需求,把邏輯寫好。

『柒』 SQL2005 存儲過程調用存儲過程,求實例

Java調用SQL Server的存儲過程詳解

包含了如下幾部分

使用不帶參數的存儲過程
使用帶有輸入參數的存儲過程
使用帶有輸出參數的存儲過程
使用帶有返回狀態的存儲過程
使用帶有更新計數的存儲過程

1使用不帶參數的存儲過程

使用 JDBC 驅動程序調用不帶參數的存儲過程時,必須使用 call SQL 轉義序列。不帶參數的 call 轉義序列的語法如下所示:
{call procere-name}
作為實例,在 SQL Server 2005 AdventureWorks 示例資料庫中創建以下存儲過程:

SQL codeCREATE PROCEDURE GetContactFormalNames
AS
BEGIN
SELECT TOP 10 Title + ' ' + FirstName + ' ' + LastName AS FormalName
FROM Person.Contact
END

此存儲過程返回單個結果集,其中包含一列數據(由 Person.Contact 表中前十個聯系人的稱呼、名稱和姓氏組成)。

在下面的實例中,將向此函數傳遞 AdventureWorks 示例資料庫的打開連接,然後使用 executeQuery 方法調用 GetContactFormalNames 存儲過程。
Java codepublic static void executeSprocNoParams(Connection con) ...{
try ...{
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("{call dbo.GetContactFormalNames}");

while (rs.next()) ...{
System.out.println(rs.getString("FormalName"));
}
rs.close();
stmt.close();
}
catch (Exception e) ...{
e.printStackTrace();
}
}

2使用帶有輸入參數的存儲過程

使用 JDBC 驅動程序調用帶參數的存儲過程時,必須結合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉義序列。帶有 IN 參數的 call 轉義序列的語法如下所示:
{call procere-name[([parameter][,[parameter]]...)]}

構造 call 轉義序列時,請使用 ?(問號)字元來指定 IN 參數。此字元充當要傳遞給該存儲過程的參數值的佔位符。可以使用 SQLServerPreparedStatement 類的 setter 方法之一為參數指定值。可使用的 setter 方法由 IN 參數的數據類型決定。
向 setter 方法傳遞值時,不僅需要指定要在參數中使用的實際值,還必須指定參數在存儲過程中的序數位置。例如,如果存儲過程包含單個 IN 參數,則其序數值為 1。如果存儲過程包含兩個參數,則第一個序數值為 1,第二個序數值為 2。
作為如何調用包含 IN 參數的存儲過程的實例,使用 SQL Server 2005 AdventureWorks 示例資料庫中的 uspGetEmployeeManagers 存儲過程。此存儲過程接受名為 EmployeeID 的單個輸入參數(它是一個整數值),然後基於指定的 EmployeeID 返回雇員及其經理的遞歸列表。下面是調用此存儲過程的 Java 代碼:

Java codepublic static void executeSprocInParams(Connection con) ...{
try ...{
PreparedStatement pstmt = con.prepareStatement("{call dbo.uspGetEmployeeManagers(?)}");
pstmt.setInt(1, 50);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) ...{
System.out.println("EMPLOYEE:");
System.out.println(rs.getString("LastName") + ", " + rs.getString("FirstName"));
System.out.println("MANAGER:");
System.out.println(rs.getString("ManagerLastName") + ", " + rs.getString("ManagerFirstName"));
System.out.println();
}
rs.close();
pstmt.close();
}
catch (Exception e) ...{
e.printStackTrace();
}
}

3使用帶有輸出參數的存儲過程
使用 JDBC 驅動程序調用此類存儲過程時,必須結合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉義序列。帶有 OUT 參數的 call 轉義序列的語法如下所示:
{call procere-name[([parameter][,[parameter]]...)]}

構造 call 轉義序列時,請使用 ?(問號)字元來指定 OUT 參數。此字元充當要從該存儲過程返回的參數值的佔位符。要為 OUT 參數指定值,必須在運行存儲過程前使用 SQLServerCallableStatement 類的 registerOutParameter 方法指定各參數的數據類型。

使用 registerOutParameter 方法為 OUT 參數指定的值必須是 Java.sql.Types 所包含的 JDBC 數據類型之一,而它又被映射成本地 SQL Server 數據類型之一。有關 JDBC 和 SQL Server 數據類型的詳細信息,請參閱了解 JDBC 驅動程序數據類型。

當您對於 OUT 參數向 registerOutParameter 方法傳遞一個值時,不僅必須指定要用於此參數的數據類型,而且必須在存儲過程中指定此參數的序號位置或此參數的名稱。例如,如果存儲過程包含單個 OUT 參數,則其序數值為 1;如果存儲過程包含兩個參數,則第一個序數值為 1,第二個序數值為 2。
作為實例,在 SQL Server 2005 AdventureWorks 示例資料庫中創建以下存儲過程: 根據指定的整數 IN 參數 (employeeID),該存儲過程也返回單個整數 OUT 參數 (managerID)。根據 HumanResources.Employee 表中包含的 EmployeeID,OUT 參數中返回的值為 ManagerID。

在下面的實例中,將向此函數傳遞 AdventureWorks 示例資料庫的打開連接,然後使用 execute 方法調用 GetImmediateManager 存儲過程:

Java codepublic static void executeStoredProcere(Connection con) ...{
try ...{
CallableStatement cstmt = con.prepareCall("{call dbo.GetImmediateManager(?, ?)}");
cstmt.setInt(1, 5);
cstmt.registerOutParameter(2, Java.sql.Types.INTEGER);
cstmt.execute();
System.out.println("MANAGER ID: " + cstmt.getInt(2));
}
catch (Exception e) ...{
e.printStackTrace();
}
}
本示例使用序號位置來標識參數。或者,也可以使用參數的名稱(而非其序號位置)來標識此參數。下面的代碼示例修改了上一個示例,以說明如何在 Java 應用程序中使用命名參數。請注意,這些參數名稱對應於存儲過程的定義中的參數名稱:
SQL code CREATE PROCEDURE GetImmediateManager
@employeeID INT,
@managerID INT OUTPUT
AS
BEGIN
SELECT @managerID = ManagerID
FROM HumanResources.Employee
WHERE EmployeeID = @employeeID
END

存儲過程可能返回更新計數和多個結果集。Microsoft SQL Server 2005 JDBC Driver 遵循 JDBC 3.0 規范,此規范規定在檢索 OUT 參數之前應檢索多個結果集和更新計數。也就是說,應用程序應先檢索所有 ResultSet 對象和更新計數,然後使用 CallableStatement.getter 方法檢索 OUT 參數。否則,當檢索 OUT 參數時,尚未檢索的 ResultSet 對象和更新計數將丟失。

4 使用帶有返回狀態的存儲過程

使用 JDBC 驅動程序調用這種存儲過程時,必須結合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉義序列。返回狀態參數的 call 轉義序列的語法如下所示:
{[?=]call procere-name[([parameter][,[parameter]]...)]}

構造 call 轉義序列時,請使用 ?(問號)字元來指定返回狀態參數。此字元充當要從該存儲過程返回的參數值的佔位符。要為返回狀態參數指定值,必須在執行存儲過程前使用 SQLServerCallableStatement 類的 registerOutParameter 方法指定參數的數據類型。

此外,向 registerOutParameter 方法傳遞返回狀態參數值時,不僅需要指定要使用的參數的數據類型,還必須指定參數在存儲過程中的序數位置。對於返回狀態參數,其序數位置始終為 1,這是因為它始終是調用存儲過程時的第一個參數。盡管 SQLServerCallableStatement 類支持使用參數的名稱來指示特定參數,但您只能對返回狀態參數使用參數的序號位置編號。
作為實例,在 SQL Server 2005 AdventureWorks 示例資料庫中創建以下存儲過程:

SQL codeCREATE PROCEDURE CheckContactCity
(@cityName CHAR(50))
AS
BEGIN
IF ((SELECT COUNT(*)
FROM Person.Address
WHERE City = @cityName) > 1)
RETURN 1
ELSE
RETURN 0
END

該存儲過程返回狀態值 1 或 0,這取決於是否能在表 Person.Address 中找到 cityName 參數指定的城市。

在下面的實例中,將向此函數傳遞 AdventureWorks 示例資料庫的打開連接,然後使用 execute 方法調用 CheckContactCity 存儲過程:

Java codepublic static void executeStoredProcere(Connection con) ...{
try ...{
CallableStatement cstmt = con.prepareCall("{? = call dbo.CheckContactCity(?)}");
cstmt.registerOutParameter(1, Java.sql.Types.INTEGER);
cstmt.setString(2, "Atlanta");
cstmt.execute();
System.out.println("RETURN STATUS: " + cstmt.getInt(1));
}
cstmt.close();
catch (Exception e) ...{
e.printStackTrace();
}
}

5 使用帶有更新計數的存儲過程

使用 SQLServerCallableStatement 類構建對存儲過程的調用之後,可以使用 execute 或 executeUpdate 方法中的任意一個來調用此存儲過程。executeUpdate 方法將返回一個 int 值,該值包含受此存儲過程影響的行數,但 execute 方法不返回此值。如果使用 execute 方法,並且希望獲得受影響的行數計數,則可以在運行存儲過程後調用 getUpdateCount 方法。

作為實例,在 SQL Server 2005 AdventureWorks 示例資料庫中創建以下表和存儲過程:

SQL codeCREATE TABLE TestTable
(Col1 int IDENTITY,
Col2 varchar(50),
Col3 int);

CREATE PROCEDURE UpdateTestTable
@Col2 varchar(50),
@Col3 int
AS
BEGIN
UPDATE TestTable
SET Col2 = @Col2, Col3 = @Col3
END;
在下面的實例中,將向此函數傳遞 AdventureWorks 示例資料庫的打開連接,並使用 execute 方法調用 UpdateTestTable 存儲過程,然後使用 getUpdateCount 方法返回受存儲過程影響的行計數。
Java code public static void executeUpdateStoredProcere(Connection con) ...{
try ...{
CallableStatement cstmt = con.prepareCall("{call dbo.UpdateTestTable(?, ?)}");
cstmt.setString(1, "A");
cstmt.setInt(2, 100);
cstmt.execute();
int count = cstmt.getUpdateCount();
cstmt.close();

System.out.println("ROWS AFFECTED: " + count);
}
catch (Exception e) ...{
e.printStackTrace();
}
}

希望可以幫到樓主,望採納!

熱點內容
c5哪個配置最值得買 發布:2024-10-07 08:27:21 瀏覽:591
sql全形轉半形 發布:2024-10-07 08:25:00 瀏覽:778
公眾伺服器配置是什麼 發布:2024-10-07 08:17:11 瀏覽:492
為什麼伺服器貴嗎 發布:2024-10-07 08:16:37 瀏覽:641
為什麼伺服器的引導分區會損壞 發布:2024-10-07 07:54:07 瀏覽:672
安卓社交源碼 發布:2024-10-07 07:16:12 瀏覽:949
python兩個list合並 發布:2024-10-07 07:12:02 瀏覽:870
迅雷文件夾加密 發布:2024-10-07 07:03:00 瀏覽:952
dns伺服器地址是多少 發布:2024-10-07 06:53:42 瀏覽:176
論壇php程序 發布:2024-10-07 06:52:16 瀏覽:581