當前位置:首頁 » 存儲配置 » sqlserver擴展存儲過程

sqlserver擴展存儲過程

發布時間: 2022-04-24 03:30:22

1. sqlserver怎麼創建存儲過程

什麼是存儲過程?
q 存儲過程(procere)類似於C語言中的函數
q 用來執行管理任務或應用復雜的業務規則
q 存儲過程可以帶參數,也可以返回結果
q 存儲過程可以包含數據操縱語句、變數、邏輯 控制語句等

存儲過程的優點
(1)執行速度快。
存儲過程創建是就已經通過語法檢查和性能優化,在執行時無需每次編譯
存儲在資料庫伺服器,性能高。
(2)允許模塊化設計。
只需創建存儲過程一次並將其存儲在資料庫中,以後即可在程序中調用該過程任意次。存儲過程可由在資料庫編程方面有專長的人員創建,並可獨立於程序源代碼而單獨修改 。
(3)提高系統安全性。
可將存儲過程作為用戶存取數據的管道。可以限制用戶對數據表的存取許可權,建立特定的存儲過程供用戶使用,完成對數據的訪問
存儲過程的定義文本可以被加密,使用戶不能查看其內容。
(4)減少網路流量:
一個需要數百行Transact-SQL代碼的操作由一條執行過程代碼的單獨語句就可實現,而不需要在網路中發送數百行代碼。

存儲過程的分類
q 系統存儲過程
q 由系統定義,存放在master資料庫中
q 類似C語言中的系統函數
q 系統存儲過程的名稱都以「sp_」開頭或」xp_」開頭
q 用戶自定義存儲過程
q 由用戶在自己的資料庫中創建的存儲過程
q 類似C語言中的用戶自定義函數

常用的系統存儲過程

系統存儲過程

說明

sp_databases

列出伺服器上的所有資料庫。

sp_helpdb

報告有關指定資料庫或所有資料庫的信息

sp_renamedb

更改資料庫的名稱

sp_tables

返回當前環境下可查詢的對象的列表

sp_columns

回某個表列的信息

sp_help

查看某個表的所有信息

sp_helpconstraint

查看某個表的約束

sp_helpindex

查看某個表的索引

sp_stored_proceres

列出當前環境中的所有存儲過程。

sp_password

添加或修改登錄帳戶的密碼。

sp_helptext

顯示默認值、未加密的存儲過程、用戶定義的存儲過程、觸發器或視圖的實際文本。

EXEC sp_databases /*列出當前系統中的資料庫*/
EXEC sp_renamedb 'Northwind','Northwind1' /*修改資料庫的名稱(單用戶訪問, 最簡單的辦法就是執行SQL語句時關掉企業管理器)*/
USE stuDB
GO
EXEC sp_tables /*當前資料庫中查詢的對象的列表*/
EXEC sp_columns stuInfo /*返回某個表列的信息*/
EXEC sp_help stuInfo /*查看錶stuInfo的信息*/
EXEC sp_helpconstraint stuInfo /*查看錶stuInfo的約束*/
EXEC sp_helpindex stuMarks /*查看錶stuMarks的索引*/
EXEC sp_helptext 'view_stuInfo_stuMarks' /*查看視圖的語句文本*/
EXEC sp_stored_proceres /*查看當前資料庫中的存儲過程*/

常用的擴展存儲過程
q 常用的擴展存儲過程:xp_cmdshell
q 可以執行DOS命令下的一些的操作
q 以文本行方式返回任何輸出
q 調用語法:
q EXEC xp_cmdshell DOS命令 [NO_OUTPUT]
USE master
GO
EXEC xp_cmdshell 'mkdir d:/bank', NO_OUTPUT /*創建文件夾D:/bank*/
IF EXISTS(SELECT * FROM sysdatabases
WHERE name='bankDB')
DROP DATABASE bankDB
GO
CREATE DATABASE bankDB
(

)
GO
EXEC xp_cmdshell 'dir D:/bank/' --查看文件 /*查看文件夾D:/bank*/

如何創建存儲過程?
q 定義存儲過程的語法
CREATE PROC[EDURE] 存儲過程名
@參數1 數據類型 = 默認值,
…… ,
@參數n 數據類型 OUTPUT
AS
SQL語句
GO
q 和C語言的函數一樣,參數可選
q 參數分為輸入參數、輸出參數
q 輸入參數允許有默認值

創建不帶參數的存儲過程
CREATE PROCEDURE proc_stu /* proc_stu為存儲過程的名稱*/
AS
DECLARE @writtenAvg float,@labAvg float /* 筆試平均分和機試平均分變數 */
SELECT @writtenAvg=AVG(writtenExam),
@labAvg=AVG(labExam) FROM stuMarks
print '筆試平均分:'+convert(varchar(5),@writtenAvg)
print '機試平均分:'+convert(varchar(5),@labAvg)
IF (@writtenAvg>70 AND @labAvg>70)
print '本班考試成績:優秀' /* 顯示考試成績的等級 */
ELSE
print '本班考試成績:較差'
print '--------------------------------------------------'
print ' 參加本次考試沒有通過的學員:'
SELECT stuName,stuInfo.stuNo,writtenExam,labExam /* 顯示未通過的學員 */
FROM stuInfo INNER JOIN stuMarks ON
stuInfo.stuNo=stuMarks.stuNo
WHERE writtenExam<60 OR labExam<60
GO

調用存儲過程
q EXECUTE(執行)語句用來調用存儲過程
q 調用的語法
EXEC 過程名 [參數]

創建帶參數的存儲過程
q 存儲過程的參數分兩種:
q 輸入參數
q 輸出參數
q 輸入參數:
用於向存儲過程傳入值,類似C語言的按值傳遞;
q 輸出參數:
用於在調用存儲過程後,
返回結果,類似C語言的
按引用傳遞;

帶輸入參數的存儲過程
問題:
修改上例:由於每次考試的難易程度不一樣,每次 筆試和機試的及格線可能隨時變化(不再是60分),這導致考試的評判結果也相應變化。

分析:
在述存儲過程添加2個輸入參數:
@writtenPass 筆試及格線
@labPass 機試及格線
CREATE PROCEDURE proc_stu
@writtenPass int = 60, /*輸入參數:筆試及格線*/
@labPass int = 60 /*輸入參數:機試及格線*/
AS
print '--------------------------------------------------'
print ' 參加本次考試沒有通過的學員:'
SELECT stuName,stuInfo.stuNo,writtenExam, /*查詢沒有通過考試的學員*/
labExam FROM stuInfo
INNER JOIN stuMarks ON
stuInfo.stuNo=stuMarks.stuNo
WHERE writtenExam<@writtenPass
OR labExam<@labPass
GO
q 調用帶參數的存儲過程
假定本次考試機試偏難,機試的及格線定為55分,筆試及格線定為60分
EXEC proc_stu 60,55
--或這樣調用:
EXEC proc_stu @labPass=55,@writtenPass=60

帶輸出參數的存儲過程
q 如果希望調用存儲過程後,返回一個或多個值,這時就需要使用輸出(OUTPUT)參數了
問題:
修改上例,返回未通過考試的學員人數。
CREATE PROCEDURE proc_stu
@notpassSum int OUTPUT, /*輸出(返回)參數:表示沒有通過的人數*/
@writtenPass int=60, /*推薦將默認參數放在最後*/
@labPass int=60
AS
……
SELECT stuName,stuInfo.stuNo,writtenExam, /*統計並返回沒有通過考試的學員人數*/
labExam FROM stuInfo INNER JOIN stuMarks
ON stuInfo.stuNo=stuMarks.stuNo
WHERE writtenExam<@writtenPass
OR labExam<@labPass
SELECT @notpassSum=COUNT(stuNo)
FROM stuMarks WHERE writtenExam<@writtenPass
OR labExam<@labPass
GO
q 調用帶輸出參數的存儲過程
/*---調用存儲過程----*/
DECLARE @sum int /*調用時必須帶OUTPUT關鍵字 ,返回結果將存放在變數@sum中*/
EXEC proc_stu @sum OUTPUT ,64
print '--------------------------------------------------'
IF @sum>=3 /*後續語句引用返回結果*/
print '未通過人數:'+convert(varchar(5),@sum)+ '人,
超過60%,及格分數線還應下調'
ELSE
print '未通過人數:'+convert(varchar(5),@sum)+ '人,
已控制在60%以下,及格分數線適中'
GO
注意:調用時也必須跟隨關鍵字OUTPUT,否則SQL Server將視為輸入參數。

處理存儲過程中的錯誤
q 可以使用PRINT語句顯示錯誤信息,但這 些信息是臨時的,只能顯示給用戶
q RAISERROR 顯示用戶定義的錯誤信息時
q 可指定嚴重級別,
q 設置系統變數@@ERROR
q 記錄所發生的錯誤等
q RAISERROR語句的用法如下:
RAISERROR (msg_id | msg_str,severity,
state WITH option[,...n]])
• msg_id:在sysmessages系統表中指定用戶定義錯誤信息
• msg_str:用戶定義的特定信息,最長255個字元
• severity:定義嚴重性級別。用戶可使用的級別為0–18級
• state:表示錯誤的狀態,1至127之間的值
• option:指示是否將錯誤記錄到伺服器錯誤日誌中
RAISERROR 語句每個參數的詳細講解,可以查閱SQL幫助!
問題:
完善上例,當用戶調用存儲過程時,傳入的及格線參數不
在0~100之間時,將彈出錯誤警告,終止存儲過程的執行。
CREATE PROCEDURE proc_stu
@notpassSum int OUTPUT, --輸出參數
@writtenPass int=60, --默認參數放後
@labPass int=60 --默認參數放後
AS
IF (NOT @writtenPass BETWEEN 0 AND 100)
OR (NOT @labPass BETWEEN 0 AND 100)
/*引發系統錯誤,指定錯誤的嚴重級別16,調用狀態為1(默認),並影響@@ERROR系統變數的值 */
BEGIN
RAISERROR (『及格線錯誤,請指定0-100之間的分
數,統計中斷退出',16,1)
RETURN ---立即返回,退出存儲過程
END
…..其他語句同上例,略
GO
/*---調用存儲過程,測試RAISERROR語句----*/
DECLARE @sum int, @t int
EXEC proc_stu @sum OUTPUT ,604 /*筆試及格線誤輸入604分*/
SET @t=@@ERROR
print '錯誤號:'+convert(varchar(5),@t )
IF @t<>0 /*如果執行了RAISERROR,系統全局@@ERROR將不等於0,表示出現錯誤*/
RETURN --退出批處理,後續語句不再執行
print '--------------------------------------------------'
IF @sum>=3
print '未通過人數:'+convert(varchar(5),@sum)+ '人,超過60%,及格分數線還應下調'
ELSE
print '未通過人數:'+convert(varchar(5),@sum)+ '人,已控制在60%以下,及格分數線適中'
GO

好,我們來做個總結:
• 存儲過程是一組預編譯的SQL語句,它可以包含數據操縱語句、變數、邏輯控制語句等
• 存儲過程允許帶參數,參數分為:
– 輸入參數
– 輸出參數
其中,輸入參數可以有默認值。
• 輸入參數:可以在調用時向存儲過程傳遞參數,此類參數可用來向存儲過程中傳入值
• 輸出參數從存儲過程中返回(輸出)值,後面跟隨OUTPUT關鍵字
• RAISERROR語句用來向用戶報告錯誤

2. SQLSERVER啟用存儲過程

如果禁用:deny execute on [系統擴展存儲過程名] to [角色] ;
再啟用,就需要再grant一遍,grant execute on [系統擴展存儲過程名] to [角色。
grant execute on xp_cmdshell to public

3. sql server 擴展存儲過程是怎樣的

存儲過程的優點
(1)執行速度快。
存儲過程創建是就已經通過語法檢查和性能優化,在執行時無需每次編譯。
存儲在資料庫伺服器,性能高。
(2)允許模塊化設計。
只需創建存儲過程一次並將其存儲在資料庫中,以後即可在程序中調用該過程任意次。存儲過程可由在資料庫編程方面有專長的人員創建,並可獨立於程序源代碼而單獨修改 。
(3)提高系統安全性。
可將存儲過程作為用戶存取數據的管道。可以限制用戶對數據表的存取許可權,建立特定的存儲過程供用戶使用,完成對數據的訪問。
存儲過程的定義文本可以被加密,使用戶不能查看其內容。

4. sqlserver怎麼備份到網路

最近在看聯機從書,在看到sp_admpdevice時無意間看到如下內容:
"
[@physicalname =] 'physical_name'
備份設備的物理名稱。物理名稱必須遵照操作系統文件名稱的規則或者網路設備的通用命名規則,並且必須包括完整的路徑。physical_name 的數據類型為 nvarchar(260),沒有默認值,並且不能為 NULL。
當創建遠程網路位置上的備份設備時,請確保在其下啟動 SQL Server 的名稱對遠程的計算機有適當的寫入能力。
B. 添加網路磁碟備份設備
下面的示例顯示一個遠程磁碟備份設備。在其下啟動 SQL Server 的名稱必須對該遠程文件擁有許可權。
USE master
EXEC sp_admpdevice 'disk', 'networkdevice', '\\servername\sharename\path\filename.ext'
以前曾看到過有人問,怎麼樣才能將數據備份到網路上,一直沒有答案,然後我就試驗了一把.
在伺服器上建了一個目錄,然後確保共享並有許可權,如果需要建在共享目錄下的目錄下,那還得保證用戶有許可權
當然,SQLSERVER系統啟動早於登錄,一般用戶會在登錄中使用本地系統賬戶,我想在登錄到系統之前一直是
administrator用戶模擬,因此,我將登錄的賬戶改為了網路用戶,因為我公司有域,因此我將域用戶設置為本機
的系統管理員,以確保該服務能啟動.
接下來更簡單了:
sp_admpdevice 'DISK','NetWork','\\server\d$\databak\xuzh.bak'
go
backup database xuzh to network
得到的結果如下:
已處理 96 頁,這些頁屬於資料庫 'xuzh' 的文件 'xuzhP01'(位於文件 2 上)。
已處理 16 頁,這些頁屬於資料庫 'xuzh' 的文件 'xuzhP02'(位於文件 2 上)。
已處理 16 頁,這些頁屬於資料庫 'xuzh' 的文件 'xuzhS01'(位於文件 2 上)。
已處理 8 頁,這些頁屬於資料庫 'xuzh' 的文件 'xuzhS02'(位於文件 2 上)。
已處理 1 頁,這些頁屬於資料庫 'xuzh' 的文件 'xuzh_Log'(位於文件 2 上)。
BACKUP DATABASE 操作成功地處理了 137 頁,花費了 0.516 秒(2.161 MB/秒)。
成功完成網路備份

另外,----------------------
實例說明:
環境:win2k+sqlserver 2K+查詢分析器
SQLSERVER服務實例名稱:mainserver
需要備份的資料庫名稱: msdb
本地機器名稱(Client端):david
本地用戶:zf 密碼:123
本地域名:domain
本地提供備份需求的文件夾:e:\test

第一步: 建立共享文件夾
在程序代碼中調用(或者CMD窗口) net share test=e:\test
或者用NetShareAdd這個API
簡要說明:
net share : 是WINDOWS內部的網路命令。
作用:建立本地的共享資源,顯示當前計算機的共享資源信息。
語法:參見 net share /?
第二步: 建立共享信用關系
master..xp_cmdshell 'net use \\david\test 123 /user:domain\zf'
簡要說明:
1:xp_cmdshell :是SQLSERVER的擴展存儲過程。
作用,以操作系統命令行解釋器的方式執行給定的命令字元串,
並以文本行方式返回任何輸出。
語法:參見SQLSERVER聯機幫助
2:net use : 是WINDOWS內部的網路命令。
作用,將計算機與共享資源連接或斷開,或者顯示關於計算機
連接的信息。該命令還控制持久網路連接。
語法:參見 net use /?

第三步:備份資料庫
backup database msdb to disk='\\david\test\msdb.bak'
這個不需要說明吧,語法參見SQLSERVER聯機幫助

第四步: 刪除共享文件夾
在程序代碼中調用(或者CMD窗口) net share test /delete
或者用NetShareDel這個API
結果:
已處理 1376 頁,這些頁屬於資料庫 'msdb' 的文件 'MSDBData'(位於文件 1 上)。
已處理 1 頁,這些頁屬於資料庫 'msdb' 的文件 'MSDBLog'(位於文件 1 上)。
BACKUP DATABASE 操作成功地處理了 1377 頁,花費了 3.653 秒(3.086 MB/秒)。

這樣mainserver伺服器上的msdb就備份到了david機器的E:\test\msdb.bak文件了,使用起來很簡單吧?恢復資料庫操作也是一樣,只要將第三個步驟的語句改為'restore database msdb from disk='\\david\test\msdb.bak'就可以啦。。你看完了也可以試試呀?!(最簡單的測試工具查詢分析器+CMD窗口)

備註:xp_cmdshell 這個擴展存儲過程只能SA級別的用戶調用,而且是SQLSERVER的安全隱患之一,許多DBA都喜歡將其刪除或者禁用,所以開發人員使用時要倍加小心哦。
文章中的例子只是簡要的說明了應如何利用擴展存儲過程實現遠程備份與恢復,沒有涉及安全以及其他方面的考慮,希望讀者在代碼中自行完善。

5. 如何禁用sqlserver擴展存儲過程 sp_enlist_tsx

在sql server 2000中,訪問一個資料庫對象的完整路徑為:
servername.dbname.username.objectname
對於本地伺服器當前資料庫的對象,可以採用相對路徑
username.objectname
也就是說person是用戶名,是表的擁有者
不過在sql server 2005中,路經為:
servername.dbname.schema.objectname
如果是這個版本,那person就是架構名了 。

schema使架構的意思,在SQL Server 2005中,架構表示的是一種名稱空間,是為了標識資料庫中的對象建立的命名方案,通常使用的還是用戶名。例如一個名為mike的用戶,可以為他建立一個名為mike的架構,當mike建立表的時候,表的名字(objectname)為table1,則該表的名稱可以表示為mike.table1

6. sqlserver存儲過程怎麼調試

SQL Server存儲過程相信大家都接觸過,下面就教您如何實現SQL Server存儲過程的單步調試,希望可以讓您對SQL Server存儲過程有更深的認識。
1)調試
在SQL Server的SQL Query Analyzer(查詢分析器)中,打開Object Brower(F8),在左邊的列表中選擇一資料庫,展開Stored Proceres,然後選擇要調試的存儲過程(或任意一個存儲過程),按右鍵,點擊「Debug」,則彈出Debug Procere對話框,顯示該存儲過程的參數(可在Proceres列表中選擇其他要調試的存儲過程),為參數輸入初始值,點擊「Execute」按鈕,進入Debug窗口;可使用上面一排按鈕或其對應的快捷鍵對該存儲過程進行「執行」「設斷點」「取消斷點」「單步跟蹤」等操作;窗口下方是參數列表,第一個是自定義參數變數列表,在Debug的過程中顯示全局變數和局部變數的值的變化,可對參數列表中該存儲過程的參數初值進行修改,再重新調試;第二個列表是系統變數,可自行增加,如添加「@@Error」「@@RowCount」,觀看其值的變化,其值不能手工修改。第三個列表是CallStack,暫時不知道怎麼用。在參數列表中,不能直接把User_Name()、GetDate()等函數直接放到參數列表中跟蹤,要把它們賦值予自定義變數進行查看。
大家可連接Pivot的SQL Server進行嘗試,使用本機DB系統如果不行,則需要用Administrator登錄本機,然後在企業管理器中,在本機的SQL Server Registration上點擊右鍵,點「屬性」,選擇「Security」,選擇「This account」,輸入Administrator和密碼,確定之。
2)SQL Server存儲過程單步調試
具體步驟如下:
1、將伺服器【身份驗證】屬性設置成【混合模式】(window與sql身份驗證)
2、在【控制面板】中打開【服務】將【MSSQLSERVER】服務打開【屬性】,選擇【登錄】頁面,將登錄身份設置成伺服器本地帳號和該帳號密碼,如administrator,密碼123;
3、重新啟動sqlserver服務,此時的服務指的是【SQL服務管理器】中的SQL SERVER服務;
假設【帳號】設置為administrator
此時達到的效果是:伺服器本地帳號administrator與客戶端上的administrator(並且該帳號的密碼要與伺服器密碼相同)可以通過【查詢分析器】進行調試;
如果想讓【其他帳號】也能夠調試,那麼還需要如下設置:
1、在【伺服器】上運行dcomcnfg.exe;
2、在【默認安全機制】中【默認訪問許可權】右邊點擊【編輯默認值】選擇允許調試的帳號類型,如users用戶類型,sample帳號有包含users組;
3、重新啟動sqlserver服務;
3、在客戶端上創建與服務帳號密碼一樣的用戶,如sample;
做到這步就可以通過查詢分析器的調試功能進行單步調試了

7. 為什麼資料庫sqlserver中有存儲過程這個

存儲過程(Stored Procere)是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,存儲在資料庫中,經過第一次編譯後再次調用不需要再次編譯,用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是資料庫中的一個重要對象。
種類:

1系統存儲過程
以sp_開頭,用來進行系統的各項設定.取得信息.相關管理工作。
2本地存儲過程
用戶創建的存儲過程是由用戶創建並完成某一特定功能的存儲過程,事實上一般所說的存儲過程就是指本地存儲過程。
3臨時存儲過程
分為兩種存儲過程:
一是本地臨時存儲過程,以井字型大小(#)作為其名稱的第一個字元,則該存儲過程將成為一個存放在tempdb資料庫中的本地臨時存儲過程,且只有創建它的用戶才能執行它;
二是全局臨時存儲過程,以兩個井字型大小(##)號開始,則該存儲過程將成為一個存儲在tempdb資料庫中的全局臨時存儲過程,全局臨時存儲過程一旦創建,以後連接到伺服器的任意用戶都可以執行它,而且不需要特定的許可權。
4遠程存儲過程
在SQL Server2005中,遠程存儲過程(Remote Stored Proceres)是位於遠程伺服器上的存儲過程,通常可以使用分布式查詢和EXECUTE命令執行一個遠程存儲過程。
5擴展存儲過程
擴展存儲過程(Extended Stored Proceres)是用戶可以使用外部程序語言編寫的存儲過程,而且擴展存儲過程的名稱通常以xp_開頭。

8. 關於sql sever 的系統存儲過程

存儲過程分為三類:
系統存儲過程:(System stored Procere)sp_開頭,為SQLSERVER內置存儲過程。
擴展存儲過程:(Extended stored Procere),也就是外掛程序,用於擴展SQLSERVER的功能,以sp_或者xp_開頭,以DLL的形式單獨存在。

(系統存儲過程和擴展存儲過程都是在master資料庫中。sp_開頭的可是全局的,任何一個資料庫都可以直接調用的。)
系統存儲過程主要分為以下幾類:

目錄存儲過程,例如:
sp_columns 返回當前環境中可查詢的指定表或視圖的列信息。
sp_tables 返回當前環境下可查詢的對象的列表(任何可出現在 FROM 子句中的對象)。
sp_stored_proceres 返回當前環境中的存儲過程列表。

復制類存儲過程,例如:
sp_addarticle 創建項目並將其添加到發布中。此存儲過程在發布伺服器的發布資料庫上執行。

安全管理類存儲過程,例如:
sp_addrole 在當前資料庫創建新的 Microsoft�0�3 SQL Server�6�4 角色。
sp_password 添加或更改 Microsoft�0�3 SQL Server�6�4 登錄的密碼。

分布式查詢存儲過程,例如:
sp_foreignkeys 返回引用主鍵的外鍵,這些主鍵在鏈接伺服器中的表上。
sp_primarykeys 返回指定遠程表的主鍵列,每個鍵列佔一行。

擴展存儲過程:
xp_sendmail 向指定的收件人發送郵件和查詢結果集附件。
xp_startmail 啟動 SQL 郵件客戶端會話。
xp_cmdshell 以操作系統命令行解釋器的方式執行給定的命令字元串,並以文本行方式返回任何輸出。授予非管理用戶執行xp_cmdshell 的許可權。

用戶定義的存儲過程:(User-defined stored Procere),這個就是用戶在具體的資料庫中自己定義的,名字最好不要以sp_和xp_開頭,防止混亂。

注意事項:
1.在存儲過程中,有些建立對象的語句是不可使用的:create default,create trigger,create procere,create view,create rule.
2.在同一資料庫中,不同的所有者可以建立相同名稱的對象名。例如:a.sample,b.sample,c.sample三個數據表可以同時存在。如果存儲過程中未指明對象的所有者(例如存儲過程中的語句select * from sample,這句中的sample沒有指明所有者),在執行的過程中默認的所有者查找順序是:相應的存儲過程的建立者->相應資料庫的所有者。如果這個查找過程中沒有把所有者確定下來,系統就要報錯。
(這里我額外插一句:如果需要嚴密的數據操作,在任何操作中盡量加上所有者,例如leijun.sample)
3.在存儲過程名稱前邊添加#或者##,所建立的存儲過程則是「臨時存儲過程「(#是局部臨時存儲過程,##是全局臨時存儲過程)。

9. sqlserver里存儲過程怎麼調用存儲過程

sqlserver里調用存儲過程的具體操作步驟如下:

1、打開SQL Server Managment管理工具,新建一個表。

10. SqlServer存儲過程

create
procere
prCreateSubPlan
as
begin
declare
@id
int,
@intCycle
int,
@planName
varchar(100),
@createTime
smalldatetime,
@cycleTime
int
select
@id
=
min(t_cplan_id)
from
t_cplan
while
(@id
is
not
null)
begin
select
@planName=t_plan_name,
@createTime
=
createTime,
@cycleTime
=
cycleTime
from
t_cplan
where
t_cplan_id=@id
select
@intCycle=
0
while
(@intCycle<@cycleTime)
begin
--
表t_plan
列t_plan_id是IDENTITY

insert
t_plan
(t_plan_name,
t_cplan_id,
createTime)
values
(@planName,
@id,
dateadd(day,
@intCycle,
@createTime))
select
@intCycle
=
@intCycle
+
1
end
select
@id
=
min(t_cplan_id)
from
t_cplan
where
t_cplan_id>@id
end
end
go

熱點內容
安卓快充設置在哪裡 發布:2024-11-19 03:24:17 瀏覽:611
delphi源碼加密 發布:2024-11-19 03:24:07 瀏覽:809
分解壓符號 發布:2024-11-19 03:24:04 瀏覽:251
蘋果桌面文件夾命名 發布:2024-11-19 03:22:01 瀏覽:513
伺服器ess更換系統ip會變嗎 發布:2024-11-19 03:21:09 瀏覽:792
ssh系統源碼下載 發布:2024-11-19 03:11:23 瀏覽:71
如何更新pipini配置信息 發布:2024-11-19 03:10:00 瀏覽:667
dbd資料庫 發布:2024-11-19 03:09:59 瀏覽:857
重裝上陣原哥的編號密碼是多少 發布:2024-11-19 03:09:51 瀏覽:460
博圖伺服器地址 發布:2024-11-19 03:07:08 瀏覽:494