當前位置:首頁 » 服務存儲 » 存儲過程運行語錄
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

存儲過程運行語錄

發布時間: 2023-05-17 13:43:50

Ⅰ oracle 存儲過程中的語句

解答如下:
1、CREATE GLOBAL TEMPORARY TABLE T_TEMP 語句是創建一個臨時表,oracle中創建臨時表有兩種,一種是事務級的,一種是會話級的,當創建臨時表語句後面有ON COMMIT delete ROWS時表示該臨時表是事務級的,ON COMMIT PRESERVE ROWS 時表示該臨時表是會話級的。
2、execute immediate 是動態執行sql語句。
上面語句的意思是動態執行一條創建事務級臨時表的ddl語句。

Ⅱ 存儲過程如何使用

問題一:SQL 中存儲過程怎麼使用? sql存儲過程及應用
一、簡介:
存儲過程(Stored Procere), 是一組為了完成特定功能的SQL 語句,集經編譯後
存儲在資料庫中,用戶通過指定存儲過程的名字並給出參數,如果該存儲過程帶有參數來執行
它,
在SQL Server 的系列版本中,存儲過程分為兩類:系統提供的存儲過程和用戶自定義存儲過程

系統SP,主要存儲master 資料庫中,並以sp_為前綴並且系統存儲過程主要是從系統表中獲取
信息,從而為系統管理員管理SQL Server。用戶自定義存儲過程是由用戶創建,並能完成
某一特定功能,如:查詢用戶所需數據信息的存儲過程。
存儲過程具有以下優點
1.存儲過程允許標准組件式編程(模塊化設計)
存儲過程在被創建以後,可以在程序中被多次調用,而不必重新編寫該存儲過程的SQL語句,而
且數
據庫專業人員可隨時對存儲過程進行修改,但對應用程序源代碼毫無影響。因為應用程序源代
碼只包含存
儲過程的調用語句,從而極大地提高了程序的可移植性。
2.存儲過程能夠實現快速的執行速度
如果某一操作包含大量的Transaction-SQL 代碼,,或分別被多次執行,那麼存儲過程要比批處理

執行速度快很多,因為存儲過程是預編譯的,在首次運行一個存儲過程時,查詢優化器對其進
行分析優
化,並給出最終被存在系統表中的執行計劃,而批處理的Transaction-SQL 語句在每次運行時
都要進行
編譯和優化,因此速度相對要慢一些。
3.存儲過程能夠減少網路流量
對於同一個針對數據資料庫對象的操作,如查詢修改,如果這一操作所涉及到的Transaction-SQL
語句被組織成一存儲過程,那麼當在客戶計算機上調用該存儲過程時,網路中傳送的只是該調
用語句,否
則將是多條SQL 語句從而大大增加了網路流量降低網路負載。
4.存儲過程可被作為一種安全機制來充分利用
系統管理員通過,對執行某一存儲過程的許可權進行限制,從而能夠實現對相應的數據訪問許可權的

制。
二、變數
@I
三、流程式控制制語句(if else | select case | while )
Select ... CASE 實例
DECLARE @iRet INT, @PKDisp VARCHAR(20)
SET @iRet = '1'
Select @iRet =
CASE
WHEN @PKDisp = '一' THEN 1
WHEN @PKDisp = '二' THEN 2
WHEN @PKDisp = '三' THEN 3
WHEN @PKDisp = '四' THEN 4
WHEN @PKDisp = '五' THEN 5
ELSE 100
END
四、存儲過程格式
創建存儲過程
Create Proc dbo.存儲過程名
存儲過程參數
AS
執行語句
RETURN
執行存儲過程
GO
*********************************************************/
-- 變數的聲明,sql裡面聲明變數時必須在變數前加@符號
DECLARE @I INT
-- 變數的賦值,變數賦值時變數前必須加set
SET @I = 30
-- 聲明多個變數
DECLARE @s varchar(10),@a INT
-- Sql 里if語句
IF 條件 BEGIN
執行語句
END
ELSE BEGIN
......>>

問題二:為什麼要使用存儲過程? 幾個去 IBM 面試的兄弟回來抱怨:去了好幾個不同的 IBM項目組,幾乎每個面試官問到資料庫的時候都要問用沒用過存儲過程,煩人不?大家去面的程序員,又不是筆者認為,存儲過程說白了就是一堆 SQL 的合並。中間加了點邏輯控制。但是存儲過程處理比較復雜的業務時比較實用。比如說,一個復雜的數據操作。如果你在前台處理的話。可能會涉及到多次資料庫連接。但如果你用存儲過程的話。就只有一次。從響應時間上來說有優勢。也就是說存儲過程可以給我們帶來運行效率提高的好處。另外,程序容易出現 BUG數據量小的,或者和錢沒關系的項目不用存儲過程也可以正常運作。mysql 的存儲過程還有待實際測試。如果是正式項目,建議你用 sqlserver 或 oracle的存儲過程。數據與數據之間打交道的話,過程會比程序來的快的多。面試官問有沒有用存儲,實際上就是想知道前來面試的程序員到底做過數據量大的項目沒。如果是培訓出來的,或者小項目小公司出來的,對存儲肯定接觸的少了。所以,要想進大公司,沒有豐富存儲過程經驗,是不行的。錯。存儲過程不僅僅適用於大型項目,對於中小型項目,使用存儲過程也是非常有必要的。其威力和優勢主要體現在:1.存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般 SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。2.當對資料庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。這些操作,如果用程序來完成,就變成了一條條的 SQL語句,可能要多次連接資料庫。而換成存儲,只需要連接一次資料庫就可以了。3.存儲過程可以重復使用,可減少資料庫開發人員的工作量。4.安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權。存儲過程的缺點1:調試麻煩,但是用 PL/SQL Developer 調試很方便!彌補這個缺點。 2:移植問題,資料庫端代碼當然是與資料庫相關的。但是如果是做工程型項目,基本不存在移植問題。 3:重新編譯問題,因為後端代碼是運行前編譯的,如果帶有引用關系的對象發生改變時,受影響的存儲過程、包將需要重新編譯(不過也可以設置成運行時刻自動編譯)。4:如果在一個程序系統中大量的使用存儲過程,到程序交付使用的時候隨著用戶需求的增加會導致數據結構的變化,接著就是系統的相關問題了,最後如果用戶想維護該系統可以說是很難很難、而且代價是空前的。維護起來更加麻煩!

問題三:oracle中的存儲過程,有什麼作用,以及怎麼在代碼中使用? 樓上也不知道從哪扒下來的,一看LZ就是初學,舉點例子不行嗎?

比如建立個測試表
create table test(id int,name varchar2(10),counts int); insert into test values (1,'張三',100);insert into test values (2,'李四',200); mit;
現在給你出個題目是
查詢所有人加在一起的counts是多少

創建存儲過程
create or replace p_test --創建存儲過程,asv_counts int;--定義變數begin --開始select sum(counts) into v_counts from test;--將得到的結果放到變數里DBMS_OUTPUT.PUT_LINE(v_counts);--將結果列印輸出end;--結束
執行這種不帶輸入參數的
begin p_test;end;
然後你檢查下結果
再給你創建一個帶輸入參數的
題目是,查詢id為1的人名是什麼
create or replace p_test1(v_id int)asv_name varchar2(10);beginselect name into v_name from test where id=v_id;DBMS_OUTPUT.PUT_LINE(v_name);end;
執行時這樣
beginp_test1(1);end;
第2個我沒給你寫注釋,你看你自己應該能理解吧
補充一下,存儲過程不一定只是執行查詢,也可以做刪除或者修改等sql語句,總體來說就是幾個或N個sql語句的 *** ,來完成系統內某些特定的需求,這些需求可以是一個sql搞定的,也可以是多個sql組合的

問題四:SQL 存儲過程建立和使用方法? Sql Server的存儲過程是一個被命名的存儲在伺服器上的Transacation-Sql語句 *** ,是封裝重復性工作的一種方法,它支持用戶聲明的變數、條件執行和其他強大的編程功能。 存儲過程相對於其他的資料庫訪問方法有以下的優點: (1)重復使用。存儲過程可以重復使用,從而可以減少資料庫開發人員的工作量。 (2)提高性能。存儲過程在創建的時候就進行了編譯,將來使用的時候不用再重新編譯。一般的SQL語句每執行一次就需要編譯一次,所以使用存儲過程提高了效率。 (3)減少網路流量。存儲過程位於伺服器上,調用的時候只需要傳遞存儲過程的名稱以及參數就可以了,因此降低了網路傳輸的數據量。 (4)安全性。參數化的存儲過程可以防止SQL注入式的攻擊,而且可以將Grant、Deny以及Revoke許可權應用於存儲過程。 存儲過程一共分為了三類:用戶定義的存儲過程、擴展存儲過程以及系統存儲過程。 其中,用戶定義的存儲過程又分為Transaction-SQL和CLR兩種類型。 Transaction-SQL 存儲過程是指保存的Transaction-SQL語句 *** ,可以接受和返回用戶提供的參數。 CLR存儲過程是指對.Net Framework公共語言運行時(CLR)方法的引用,可以接受和返回用戶提供的參數。他們在.Net Framework程序集中是作為類的公共靜態方法實現的。(本文就不作介紹了) 創建存儲過程的語句如下:Code
CREATE { PROC | PROCEDURE } [schema_name.] procere_name [ ; number ]
[ { @parameter [ type_schema_name. ] data_type }
[ VARYING ] [ = default ] [ [ OUT [ PUT ]
] [ ,n ]
[ WITH [ ,n ]
[ FOR REPLICATION ]
AS { [;][ n ] | }
[;]
::=
[ ENCRYPTION ]
[ REPILE ]
[ EXECUTE_AS_Clause ]
::=
{ [ BEGIN ] statements [ END ] }
::=
EXTERNAL NAME assembly_name.class_name.method_name [schema_name]: 代表的是存儲過程所屬的架構的名稱 例如: Create Schema yangyang8848
Go
Create Proc yangyang8848.AllGoods
As Select * From Master_Goods
Go 執行:Exec AllGoods 發生錯誤。 執......>>

問題五:資料庫中的存儲過程怎麼用 啊!!求解..... 10分 關鍵字:procere
例子:
SQL> create [or replace] procere procere_name is
begin
--開始執行
insert into test('10001','Visket');
end;
/
以上操作就能為test表添加一條信息
執行存儲過程procere用的命令是exec
記住存儲過程中,語句結尾一定要有分號

問題六:存儲過程是多用還是少用? 做項目的時候我們有時候會面臨一個選擇,我們到底是應該多寫存儲過程還是少寫存儲過程了?這個問題的爭論也是由來已久,在不同的公司以及不同的技術負責人那裡往往會得到不同的答案。在實際項目中我們最後所採取的方式,往往不外乎以下三種方式。
第一種方式是要求所有資料庫操作不使用任何的存儲過程,所有操作都採用標准sql語句來完成,即便是一個動作需要完成多步資料庫操作,也不使用任何存儲過程,而是在程序代碼中採用事務的方式來完成;第二種方式就是就要求所有的資料庫操作都用存儲過程封裝起來,哪怕是一個最簡單的insert 操作。在程序代碼看不到一行 sql語句,如果採用分工合作的方式,程序員甚至都可以不懂sql語法。第三種方式是一般相對簡單的資料庫操作採用標准sql語句來完成,一些相對比較復雜的商務邏輯用存儲過程來完成。
當然系統如果採用了hibernate或nhibernate之類的框架,不需要寫sql語句的時候,我想還是應該屬於第三種方式,因為在開發的時候hibernate框架允許我們在適當的時候,拋開其框架自己寫存儲過程和sql語句來完成資料庫操作。其實這三種方式都各有所長,也各有不足。
第一種方式是所有的資料庫操作都採用標准sql語句來完成的方式,在程序的執行效率上是肯定不如後面兩種方式,系統如果是一個大型的ERP,這種方式就是絕對不可取的。因為在開發基本結束後,系統如果需要優化或者希望得到優化時,那對開發人員來說就是一件非常麻煩的事情了,因為優化的重點基本上都是集中資料庫操作上,開發人員所能做的就是一個個sql語句去檢查,是不是還能進一步優化,尤其是一些相對比較復雜的查詢語句是我們所檢查的重點。分頁顯示就是一個典型的存儲過程提高程序效率的例子。如果使用存儲過程來進行分頁操作,就是利用存儲過程從系統中提取我們所需要的記錄集,分頁的效率就大大提高了。反過來如果我們不用存儲過程進行分頁操作,是利用sql語句的方式把所有記錄集都讀入內存中,然後再從內存中獲取我們所需要的記錄 *** ,這樣分頁效率自然就降低了。當然利用sql語句也能得到我們所需要的記錄,而不是所有記錄,但是那樣麻煩多了,不在我們討論范圍之內。
這種方式另外還有一個不足之處,一個系統或一個項目總會或多或少地存在有一些容易變化而又復雜的商務邏輯,如果把這些復雜的商務邏輯封裝到存儲過程中,商務邏輯的變化都只涉及存儲過程變化,而與程序代碼不 *** ,那麼不用存儲過程太可惜了。
這種方式雖然有不足,但是一旦採用這種方式的話,我們如果對該項目進行資料庫移植的時候,開發人員就會覺得當時的決策人是多麼的偉大與英明。而且我們知道access和mysql的以前版本是不提供存儲過程支持的,所有一些中小項目在這個方面的選擇往往也是不得已而為之。不用存儲過程有一個優點,調試代碼的時候沒有存儲過程可是要方便很多很多的哦,所以在很多很多的項目中都是採用標準的sql語句而不使用任何的存儲過程。這可是大多程序員用標准sql而不用存儲過程的直接原因,說白了,就是嫌麻煩。
第二種方式是所有的資料庫操作全部採用存儲過程封裝的方式,如果採用這種方式,程序的執行效率相對要高,尤其面對在一些復雜的商務邏輯時候,不僅在效率方面有明顯的提高,而且當商務邏輯發生變化時,我們開發人員做相應的修改的時候,往往都不用修改程序代碼,僅僅修改存儲過程就能滿足系統變化了。
還有一個好處就是當我們開發好的一個系統後,如果發現一種模式或語言在某些方面難以滿足需求時,我們就可以很快的用兩外一種語言來重新開發,那個時候就非常方便了。比如在02年中科院下屬的一個公司就用ASP開......>>

問題七:在SQL中存儲過程的一般語法是什麼? sql server存儲過程語法
存儲過程就是作為可執行對象存放在資料庫中的一個或多個SQL命令。
定義總是很抽象。存儲過程其實就是能完成一定操作的一組SQL語句,只不過這組語句是放在資料庫中的(這里我們只談SQL Server)。如果我們通過創建存儲過程以及在ASP中調用存儲過程,就可以避免將SQL語句同ASP代碼混雜在一起。這樣做的好處至少有三個:
第一、大大提高效率。存儲過程本身的執行速度非常快,而且,調用存儲過程可以大大減少同資料庫的交互次數。
第二、提高安全性。假如將SQL語句混合在ASP代碼中,一旦代碼失密,同時也就意味著庫結構失密。
第三、有利於SQL語句的重用。

在ASP中,一般通過mand對象調用存儲過程,根據不同情況,本文也介紹其它調用方法。為了方便說明,根據存儲過程的輸入輸出,作以下簡單分類:
1. 只返回單一記錄集的存儲過程
假設有以下存儲過程(本文的目的不在於講述T-SQL語法,所以存儲過程只給出代碼,不作說明):
/*SP1*/
CREATE PROCEDURE dbo.getUserList
as
set nocount on
begin
select * from dbo.[userinfo]
end
go
以上存儲過程取得userinfo表中的所有記錄,返回一個記錄集。通過mand對象調用該存儲過程的ASP代碼如下:

'**通過mand對象調用存儲過程**
DIM Mym,MyRst
Set Mym = Server.CreateObject(ADODB.mand)
Mym.ActiveConnection = MyConStr 'MyConStr是資料庫連接字串
Mym.mandText = getUserList '指定存儲過程名
Mym.mandType = 4 '表明這是一個存儲過程
Mym.Prepared = true '要求將SQL命令先行編譯
Set MyRst = Mym.Execute
Set Mym = Nothing
存儲嘩程取得的記錄集賦給MyRst,接下來,可以對MyRst進行操作。
在以上代碼中,mandType屬性表明請求的類型,取值及說明如下:
-1 表明mandText參數的類型無法確定
1 表明mandText是一般的命令類型
2 表明mandText參數是一個存在的表名稱
4 表明mandText參數是一個存儲過程的名稱

還可以通過Connection對象或Recordset對象調用存儲過程,方法分別如下:
'**通過Connection對象調用存儲過程**
DIM MyConn,MyRst
Set MyConn = Server.CreateObject(&qu......>>

問題八:如何使用Oracle存儲過程的一個簡單例子 樓主您好
---創建表
create table TESTTABLE
(
id1 VARCHAR2(12),
name VARCHAR2(32)
)
select t.id1,t.name from TESTTABLE t
insert into TESTTABLE (ID1, NAME)
values ('1', 'zhangsan');
insert into TESTTABLE (ID1, NAME)
values ('2', 'lisi');
insert into TESTTABLE (ID1, NAME)
values ('3', 'wangwu');
insert into TESTTABLE (ID1, NAME)
values ('4', 'xiaoliu');
insert into TESTTABLE (ID1, NAME)
values ('5', 'laowu');
---創建存儲過程
create or replace procere test_count
as
v_total number(1);
begin
select count(*) into v_total from TESTTABLE;
DBMS_OUTPUT.put_line('總人數:'||v_total);
end;
--准備
--線對scott解鎖:alter user scott account unlock;
--應為存儲過程是在scott用戶下。還要給scott賦予密碼
---alter user scott identified by tiger;
---去命令下執行
EXECUTE test_count;
----在ql/spl中的sql中執行
begin
-- Call the procere
test_count;
end;
create or replace procere TEST_LIST
AS
---是用游標
CURSOR test_cursor IS select t.id1,t.name from TESTTABLE t;
begin
for Test_record IN test_cursor loop---遍歷游標,在列印出來
DBMS_OUTPUT.put_line(Test_record.id1||Test_record.name);
END LOOP;
test_count;--同時執行另外一個存儲過程(TEST_LIST中包含存儲過程test_count)
end;
-----執行存儲過程TEST_LIST
begin
TEST_LIST;
END;
---存儲過程的參數
---IN 定義一個輸入參數變數,用於傳遞參數給存儲過程
--OUT 定義一個輸出參數變數,用於從存儲過程獲取數據
---IN OUT 定義一個輸入、輸出參數變數,兼有以上兩者的功能
......>>

問題九:如何使用sql語句查看存儲過程 --下面這條語句可以查看存儲過程具體代碼exec sp_helptext 存儲過程名--下面這條語句查看資料庫中有哪些存儲過程select * from sysobjects where type='P'

問題十:存儲過程中怎麼使用row 一般分為十種情況,每種語法各不相同: 1、 創建語法create proc | procere pro_name [{@參數數據類型} [=默認值] [output], {@參數數據類型} [=默認值] [output], .... ]as SQL_statements2、 創建不帶參數存儲過程--創建存儲過程if (exists (select * from sys.objects where name = 'proc_get_student')) drop proc proc_get_studentgocreate proc proc_get_studentas select * from student;--調用、執行存儲過程exec proc_get_student;3、 修改存儲過程--修改存儲過程alter proc proc_get_studentasselect * from student;4、 帶參存儲過程--帶參存儲過程if (object_id('proc_find_stu', 'P') is not null) drop proc proc_find_stugocreate proc proc_find_stu(@startId int, @endId int)as select * from student where id between @startId and @endIdgoexec proc_find_stu 2, 4;5、 帶通配符參數存儲過程--帶通配符參數存儲過程if (object_id('proc_findStudentByName', 'P') is not null) drop proc proc_findStudentByNamegocreate proc proc_findStudentByName(@name varchar(20) = '%j%', @nextName varchar(20) = '%')as select * from student where name like @name and name like @nextName;goexec proc_findStudentByName;exec proc_findStudentByName '%o%', 't%';6、 帶輸出參數存儲過程if (object_id('proc_getStudentRecord', 'P') is not null) drop proc proc_getStudentRecordgocreate proc proc_getStudentRecord( @id int, --默認輸入參數 @name varchar(20) out, --輸出參數 @age varchar(20) output--輸入輸出參數)as select @name = name, @age = age from student where id = @id and sex = @age;go-- declare @id int, @name varchar(20), @temp varchar(20)......>>

Ⅲ SQL存儲過程怎樣外加條件,DOS運行SQL語句

這需要用到帶參數的斗改念存儲過程:
帶輸入參數的存儲過程例子:

CREATE PROCEDURE AR_Cus_Creditfree
@cclass varchar(50) --這個是需要輸入的參數
AS
select * from code where cclass = @cclass

當你要殲慧運行時候:

exec AR_Cus_Creditfree @cclass='資產'
或者
exec AR_Cus_Creditfree '資產'

關於在DOS運行sql 看我給出空困的鏈接

Ⅳ 如何查看存儲過程運行到哪個語句了

存儲過程(procere 過程)

SQL Server2005 的存儲過程包含一些 T-SQL 語句並以特定的名稱存儲在數據中(存儲過程也是一種資料庫對象)可以在存儲過程中聲明變數,有條件的執行及其他各項強大的程序設計功能

SQL Server2005 的存儲過程與其它育種設計語言的過程類似,同樣按以下方式運行:
(1)它能夠包含執行各種資料庫操作的語句,並且可以調用其他的存儲過程;
(2)能夠接受輸入參數,並以輸出參數的形式將多個數據值返回給調用程序(Calling Procere)或批處理(Batch);
(3)向調用程序或批處理返回一個狀態值,以表明成功或失敗(以及失敗的原因);
(4)存儲過程(Stored Proceres) 是一組為完成特定功能的SQL 語句集,經編譯後,存儲在資料庫中,用戶通過指定存儲過程的名字給出參
數(如果該存儲過程帶有參數)來執行它;

存儲過程的類型:
一、(系統存儲過程):存儲過程在運行時生成執行方式,其後在運行時執行速度很
SQL Server2005 不僅提供用戶自定義存儲過程的功能,而且也提供許多可作為工具使用的系統存儲過程;
系統存儲過程(Systerm StroedProceres) 主要存儲在master資料庫中,並以 sp_ 為前輟,並且系統存儲過程主要是從系統表中獲取信息,從而為管理員SQL Server2005提供支持。通過系統存儲過程SQL Server2005中的許多管理性或信息性的活動(如了解數據對象,資料庫信息等)都可以被有效地完成,盡管這些系統存儲過程被存儲在master資料庫中,但是仍然可以在其他 資料庫中對其進行調用,在調用時,不必在存儲過程前面加上資料庫名,而且當創建一個資料庫時,一些存儲過程會在新的資料庫中被自動創建;
系統存儲過程所能完成操作很多,如提供幫助的存儲過程
sp_helpsql 顯示關於SQL語句,存儲過程和其他主題的信息
sp_help 提供關於存儲過程或其他資料庫對象的報告
sp_helptext 顯示存儲過程和其他對象文本
sp_depends 列舉引用或依賴指定對象的所有存儲過程
sp_talbes 取得資料庫中關於表和視圖的相關信息,
sp_renameedb 更改資料庫的名稱

SQL Server2005系統存儲過程可以使用戶很容易地從系統表中提取信息,管理資料庫,並執行涉及更新系統表的其他任務
系統存儲過程中在master資料庫中創建,由系統管理員管理,所有系統存儲過程的名字均以sp_開始
如果過程以sp_前綴命名的過程在當前資料庫中找不到,SQL Server2005就在master資料庫中尋找,以sp_前綴命名的過程中引用的表如果不能在當前資料庫中解析出來,將在master資料庫查找

當前系統存儲過程的參數是保留字或對象名,且對象名由資料庫或擁有者名字限定時,整個名字必須包含在單引號中,一個用戶可以在所有資料庫中執行一個系統存儲過程的許可權,否則在任何資料庫中都不能執行系統存儲過程

二、(本地存儲過程)
本地存儲過程(Local Stored Proceres)也就是用戶自行創建並存儲在用戶資料庫中的存儲過程,一般所說的存儲過程就是指的是本地的
用戶創建的存儲過程是由用戶創建並能完成某一特定功能(如:查詢用戶所需要的數據信息)的存儲過程

三、(臨時存儲過程)
臨時存儲過程(Temporary StoredProceres)可分為以下兩種
1)本地臨時存儲過程
不論哪一個資料庫是當前資料庫,如果在創建存儲過程時,以井字型大小 (#) 作為其名稱的,第一個字元,則該存儲過程將成為一個存放在tempdb資料庫中的本地臨時存放存儲過程(如:CREATE PROCEDURE #book_proc) 本地臨時存儲過程只有創建它的連接的用戶才能夠執行它,而且一但這位用戶斷開與 sql-server的連接(也就是注銷sql-server2005)本地臨時存儲過程就會自動刪除,當然,這位用戶也可以連接期間用 DROP PROCEDURE 命令刪除他所創建的本地臨時存儲過程;
由於本地存儲過程的適用范圍僅限於創建它的連接,因此,不需擔心其名稱會和其他連接所採用的名稱相同

2)全臨時存儲過程
不論哪一個資料庫當前資料庫,只要所創建的存儲過程名稱是以兩個井字型大小(##)開始,則該存儲過程將成為一個存儲在tempdb 資料庫中的全局臨時存儲過程(例如:create procere ##book_proc) 全局臨時存儲過程一旦創建,以後連接到 SQL Server2005 的任意用戶都能執行它,而且不需要特定的許可權
當創建全局臨時存儲過程的用戶斷開與SQL Server2005的連接時,SQL Server2005將檢查是否有其他用戶在執行該全局臨時存儲過程,如果沒有,便立刻將全局臨時存儲過程刪除,如果有SQL Server2005會讓這些正在執行中的操作繼續進行,但是不允許任何用戶再執行全局臨時存儲過程,等到有未完成的操作執行完畢後,全局臨時存儲過程就會自動刪除;
由於全局臨時存儲過程能夠被所有的連接用戶使用,因些必須注意其名稱不能和其他連接所採用的名稱相同
不論創建的是本地臨時存儲過程還是全局臨時存儲過程,只要SQL Server2005一停止運行,它們將不復存在;

四(遠程存儲過程)
在SQL Server2005 中,遠程存儲過程(Remote Stored Proceres)是位於遠程伺服器上的存儲過程,通常可以使用分布式查詢和 excute 命令執行一個遠程存儲過程;

五(擴展存儲過程)
擴展存儲過程(Extended Stored Proceres)是用戶可以使用外部程序語言編寫的存儲過程,通過擴展存儲過程可以彌補SQL Server2005的不足,它在使用和執行上與一般的存儲過程完全相同;可以將參數傳遞給擴展存儲過程,擴展存儲過程也能夠返回結果和狀態值;
為了區別擴展存儲過程的名稱通常以xp_開頭,擴展存儲過程是以動態鏈接庫(DLLS)的形式存在,能讓SQL Server2005動態地裝載和執行,擴展存儲過程一定要存儲在系統資料庫 master 中

存儲過程的優點
(1) 通過本地存儲、代碼預編譯和緩存技術實現高性能的數據操作
(2) 通過用編程結構和過程實現編程框架;如果業務規則發生變化,可以通過修改存儲過程來適應新的業務規則,而不必修改客戶端的應用程 序,這樣所有調用該存儲過程的應用程序就會遵循新的業務規則;
(3) 通過隔離和加密的方法提高資料庫的安全性。資料庫可以通過得到許可權來執行存儲過程,而不必給予用戶直接訪問資料庫對象的許可權,這 些對象交收存儲過程來執行操作,另外,存儲過程可以加密,這樣用戶就無法閱讀存儲過程中的T-sql語句。這樣做將資料庫的結構和數 據庫用戶隔離開來,時一步保證數據的完整性和可靠性;

存儲過程與視圖的比較
(1) 可以在單個存儲過程執行一系列T-SQL 語句,而在視圖中只能是 select 語句
(2) 視圖不能接受參數,只能返回結果集;而存儲過程可以接受參數,包括輸入,輸出參數,並能返回單個或多個結果集以及返回值,這樣可 大大地提高應用的靈活性;
一般來說,人們將經常用到的多個表的連接查詢定義為視圖,而存儲過程完成復雜的一第列的處理,在存儲過程中也會經常用到視圖;

創建存儲過程
CREATE PROCEDURE procere_name
[WITH ENCRYPTION]
[WITH RECOMPILE]
AS
Sql_statement

其中 with encryption 對存儲過程進行加密; with recompile 對存儲過程重新編譯
例如:使用T-SQL 語句在book資料庫中創建一個名為p_book1的存儲過程 該存儲過程返回book1表中所有出版社為"中國長安"的記錄
USE book
GO
CREATE PROCEDURE p_book1
AS
SELECT * FROM book1 WHERE 出版社='中國長安'

執行存儲過程

存儲過程創建成功後,用戶可以執行存儲過程來檢查存儲過程的返回結果;基本語法如下:
exec procere_name
例如:使用T-SQL語句執行上面創建的存儲過程 運行命令如下:
USE book
GO
exec p_book1
在運行完畢後,在SQL-Server ManagementStudio 查詢窗口中返回的結果
存儲過程創建成功後可以在 SQL-Server ManagementStudio 窗口中下查看存儲過程的屬性
例如:在 SQL-Server ManagementStudio 窗口中查看存儲過程 p_book1 的屬性:
對象資源管理器-> 展開book選項-> 展開可編程性-> 右擊 p_book1選擇修改命令 就可以修改存儲過程命令屬性

帶參數的存儲過程

由於視圖沒有提供參數,對於行的篩選取只能綁定在視圖中定義,靈活性不大,而存儲過程提供了參數,大大提高了系統開發的靈活性
向存儲過程設定輸入、輸出參數主要目的是通過參數向存儲過程輸入和輸出信息來擴展存儲過程的功能,能過設定能數,可以多次使用同一存儲過程並按要求查找所需要的結果;

1、帶輸入參數的存儲過程
輸入參數是指由調用程序向存儲過程傳遞的參數,它們在創建存儲過程語句中被定義,在執行存儲過程中給出相應的變數值,為了定義輸入參數存儲過程,需要在 create procere 語句中聲明一個或多個變數作為參數;其語法格式如下:
CREATE PROCEDURE procerd_name
@parameter_name datatype=[default]
[with encryption]
[with recompile]
AS
Sql_statement

其中各項參數如下
(1) @parameter_name: 存儲過程的參數名稱,必須以符號@為前綴
(2) Datatype: 參數的數據類型
(3) Default: 參數的默認值,如果執行存儲過程時未提供該參數的變數值,則使用default值

例子:使用T-SQL語句在book數據表中創建一個名為p_book1p的存儲過程,該存儲過程能根據給定的出版社回該出版社代碼對應的book1表中的的記錄:

分析:直接把上面的例子最後面的SQL語句 select * from book1 where 出版社='中國長安' 將裡面的 「出版社='中國長安'」用變理代替為 select * from book1 where 出版社= @出版社 其中變數名 @出版社取了代值 '中國長安';由於使用了變數,所以需要定義該變數,我們把「出版社」的長度設為是20位字元串;所以在 AS 之前定義變更@出版社 varchar(20);

create procere p_book1p
@出版社 varchar(20)
AS
SELECT * FROM book1 WHERE 出版社=@出版社

執行含有輸入參數的存儲過程
1)使用參數名傳遞參數值
在執行存儲過程的語句中通過語句 @paramter_name=value 給出參數的傳遞值,當存儲過程含有多個參數時,參數值可以任意順序設定,對於允許空值和具有默認值的輸入參數可以不給出參數的傳遞值;其格式語法如下:
exec procere_name
[@paramenter_name=value]
[,....n]
例子:用參數名傳遞參數值的方法執行存儲過程p_book1p,分別查出出版社為'中國長安'和"安徽人民"書的記錄
exec p_book1p @出版社='中國長安'
go
exec p_book1p @出版社='安徽人民'
go

2) 按位置傳遞參數值
在執行存儲過程的語句中,不通過參數傳遞值面直接給出參數的傳遞值,當存儲過程含有多個輸入參數時,傳遞值的順序必須與存儲過程中定義的輸入參數順序相一致,按位置傳遞參數時,也可以忽略空值和具有默認值的參數,但不能因此破壞輸入參數的設定順序;比如:在一個含有4個參數的存儲過程中,用戶可以忽略第3和第四個參數,但無法在忽略第3個的情況下而指定第4個參數的輸入值;
語法格式如下:
exec procere_name
[value1,value2,....]

例子:用按位置傳遞參數值的方法執行存儲過程 p_book1p 分別查找出版社為「中國人口」和「內蒙人民」書的記錄
exec p_book1p '內蒙人民'
go
exec p_book1p '中國人口'
go

按位置傳遞參數值比按參數名傳遞參數值更簡捷比較適合參數值較少的情況,而按照參數名傳遞的方法使程序的可讀性增強,特別是參數數量較多時,建議用按參數名傳遞參數的方法,這樣的程序可讀性/可維護性都要好一些;

3) 帶輸出參數的存儲過程
如果需要從存儲過程中返回一個或多個值,可以通過在創建存儲過程的語句中定義輸出參數來實現,為了使用輸出參數,需要在
create procere 語句中指定 output 關鍵字 輸出語法如下: @parameter_name datatype=[defautl] OUTPUT
例如:創建存儲過程 p_book1Num 要求能根據用戶給定的出版社,統計該出版社的出書數量,並將數量以輸入變數的形式返回給用戶:
CREATE PROCEDURE p_bookNum
@出版社 var(20),@bookNum smallint output
AS
SET @BOOK1Num= --(這個裡面是給book1Num 賦值)
(
select count(*) from book1
where 出版社=@出版社
)
ptrint @book1Num

執行存儲過程p_book1Num
由於在存儲過程 p_book1Num 中使用了參數@出版社和@book1Num 所以在測試時需要先定義相應的變數,對於輸入參數@出版社需要賦值,而輸出參數 @book1Num 無需賦值,它是從存儲過程中獲得返回值供用戶進一步使用的

declare @出版社 varchar(20), @book1Num SMALLINT
set @出版社=「中國長安」
exec p_book1Num @出版社,@book1Num

說明:這里在是sql server2005 環境下進行測試的,而在進行系統開發時,往往變數的定義,賦值,使用都是在應用程序中設計的,存儲過程 p_book1Num 的 print @book1Num語句也是為了在 SQL Server2005環境中測試而設計的

刪除、修改、重命名存儲過程

修改存儲過程:是由alert 語句來完成的,語法如下:
ALTER procere procere_name
[with encryption]
[with recompile]
as
Sql_statement
例子:使用T-SQL語句修改存儲過程 p_book1p 根據用戶提供的出版社名稱進行模糊查詢並要求加密:

alter procere p_book1p
@出版社 varchar(20)
with encryption
as
select 出版社,ISBN號,定價,作者姓名
from book1,teacher
where book1.編號=teacher.編號 and 出版社 like '%@出版社%'

存儲過程的刪除:存儲過程的刪除是通過DROP語句來實現的
例如:使用T-SQL語句來刪除存儲過程p_book1
use book
go
drop procere p_book1

使用SQL-Server Management Studio窗口刪除存儲過程 p_book1p:
對象資源管理器-> 展開BOOK-> 展開可編程性-> 右鍵dbo.p_book1p->刪除 就可以了

存儲過程重命名:
對象資源管理器-> 展開BOOK-> 展開可編程性-> 右鍵dbo.p_book1p->重命名

存儲過程的重編譯處理
在存儲過程中所用的查詢只在編譯時進行優化,對資料庫進行索引或其他會影響資料庫統計的更改後,可能降低已編譯的存儲過程的效率,通過對存儲過程進行重新編譯,可以重新優化查詢;
在SQL-Server2005 中有三種方法重新編譯的方法:
1) 在創建存儲過程時使用 with recompile 子句
with recompile 子句可以指示 sql server2005 不將該存儲過程的查詢計劃保存在緩存中,而是在每次運行時重新編譯和優化,並創建新 的查詢計劃;下面是例子:
use book
go
create procere p_book1p
@出版社 varchar(20)
with recompile
as
select * from book1 where 出版社=@出版社
這種方法並不常用,因為在每次執行存儲過程時都要重新編譯,在整體上降低了存儲過程的執行速度,除非存儲過程本身是一個比較復雜,耗時的操作,編譯的時間相對於執行存儲過程時間少;

2) 在執行存儲過程時設定重新編譯選項
通過在執行存儲過程時設定重新編譯,可以讓SQL-Server2005在執行存儲過程時重新編譯該存儲過程,在這一次執行後,新的查詢計劃又被保存在緩存中;基語法格式是:
execute procere_name with recompile
以重新編譯的方式執行存儲過程p_book1p:
use book
go
execute p_book1p '中國長安'with recompile 此方法一般在存儲過程創建後,數據發生了顯著變化時使用

3) 通過系統存儲過程設定重新編譯選擇;其語法如下
exec sp_recomplie OBJECT 其中OBJECT 當前資料庫中的存儲過程,表或視圖的名稱
例子:執行下面的語句將導致book1表的觸發器和存儲過程在下次運行時將被重新編譯:
exec sp_recompile book

===========================================================================================================================
觸發器的創建和管理

概述:在SQL-Server2005資料庫系統中,存儲過程和觸發器都是SQL語句和流程式控制制語句的集合

===========================================================================================================================

Ⅳ 調用存儲過程sql 語句怎麼寫

存儲過程中執行動態Sql語句
MSSQL為我們提供了兩種動態執行SQL語句的命令,分別是EXEC和sp_executesql;通常,sp_executesql則更具有優勢,它提供了輸入輸出介面,而EXEC沒有。還有一個最大的好處就是利用sp_executesql,能夠重用執行計劃,這就大大提供了執行性能,還可以編寫更安全的代碼。EXEC在某些情況下會更靈活。除非您有令人信服的理由使用EXEC,否側盡量使用sp_executesql.
1.EXEC的使用
EXEC命令有兩種用法,一種是執行一個存儲過程,另一種是執行一個動態的批處理。以下所講的都是第二種用法。
下面先使用EXEC演示一個例子,代碼1
DECLARE @TableName VARCHAR(50),@Sql NVARCHAR (MAX),@OrderID INT;
SET @TableName = 'Orders';
SET @OrderID = 10251;
SET @sql =
'SELECT * FROM '+QUOTENAME(@TableName) +'WHERE OrderID = '+
CAST(@OrderID AS VARCHAR(10))+' ORDER BY ORDERID DESC'
EXEC(@sql);
註:這里的EXEC括弧中只允許包含一個字元串變數,但是可以串聯多個變數,如果我們這樣寫EXEC:

EXEC('SELECT TOP('+ CAST(@TopCount AS VARCHAR(10)) +')* FROM '+
QUOTENAME(@TableName) +' ORDER BY ORDERID DESC');

SQL編譯器就會報錯,編譯不通過,而如果我們這樣:

EXEC(@sql+@sql2+@sql3);

編譯器就會通過;

所以最佳的做法是把代碼構造到一個變數中,然後再把該變數作為EXEC命令的輸入參數,這樣就不會受限制了。

EXEC的缺點是不提供介面,這里的介面是指,它不能執行一個包含一個帶變數符的批處理,如下
DECLARE @TableName VARCHAR(50),@Sql NVARCHAR(MAX),@OrderID INT;
SET @TableName = 'Orders';
SET @OrderID = 10251;
SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) +
'WHERE OrderID = @OrderID ORDER BY ORDERID DESC'
EXEC(@sql);
關鍵就在SET @sql這一句話中,如果我們運行這個批處理,編譯器就會產生一下錯誤
Msg 137, Level 15, State 2, Line 1
必須聲明標量變數 "@OrderID"。
使用EXEC時,如果您想訪問變數,必須把變數內容串聯到動態構建的代碼字元串中,如:
SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) + 'WHERE OrderID = '+CAST(@OrderID AS VARCHAR(10))+' ORDER BY ORDERID DESC'

串聯變數的內容也存在性能方面的弊端。SQL Server為每一個的查詢字元串創建新的執行計劃,即使查詢模式相同也是這樣。為演示這一點,先清空緩存中的執行計劃
DBCC FREEPROCCACHE (這個不是本文所涉及的內容,您可以查看MS的MSDN)
將代碼1運行3次,分別對@OrderID 賦予下面3個值,10251,10252,10253。然後使用下面的代碼查詢

SELECT cacheobjtype,objtype,usecounts,sql FROM sys.syscacheobjects WHERE sql NOT LIKE '%cach%' AND sql NOT LIKE '%sys.%'

點擊F5運行,我們可以看到,每執行一次都要產生一次的編譯,執行計劃沒有得到充分重用。

EXEC除了不支持動態批處理中的輸入參數外,他也不支持輸出參數。默認情況下,EXEC把查詢的輸出返回給調用者。例如下面代碼返回Orders表中所有的記錄數
DECLARE @sql NVARCHAR(MAX)
SET @sql = 'SELECT COUNT(ORDERID) FROM Orders';
EXEC(@sql);
然而,如果你要把輸出返回給調用批處理中的變數,事情就沒有那麼簡單了。為此,你必須使用INSERT EXEC語法把輸出插入到一個目標表中,然後從這表中獲取值後賦給該變數,就像這樣:

代碼
DECLARE @sql NVARCHAR(MAX),@RecordCount INT
SET @sql = 'SELECT COUNT(ORDERID) FROM Orders';
CREATE TABLE #T(TID INT);
INSERT INTO #T EXEC(@sql);
SET @RecordCount = (SELECT TID FROM #T)
SELECT @RecordCount
DROP TABLE #T2

2.sp_executesql的使用
sp_executesql命令在SQL Server中引入的比EXEC命令晚一些,它主要為重用執行計劃提供更好的支持。
為了和EXEC作一個鮮明的對比,我們看看如果用代碼1的代碼,把EXEC換成sp_executesql,看看是否得到我們所期望的結果

代碼
DECLARE @TableName VARCHAR(50),@sql NVARCHAR(MAX),@OrderID INT ,@sql2 NVARCHAR(MAX);
SET @TableName = 'Orders ';
SET @OrderID = 10251;
SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) + ' WHERE OrderID = '+CAST(@OrderID AS VARCHAR(50)) + ' ORDER BY ORDERID DESC'
EXEC sp_executesql @sql

注意最後一行;事實證明可以運行;
sp_executesql提供介面
sp_executesql命令比EXEC命令更靈活,因為它提供一個介面,該介面及支持輸入參數也支持輸出參數。這功能使你可以創建帶參數的查詢字元串,這樣就可以比EXEC更好的重用執行計劃,sp_executesql的構成與存儲過程非常相似,不同之處在於你是動態構建代碼。它的構成包括:代碼快,參數聲明部分,參數賦值部分。說了這么多,還是看看它的語法:

EXEC sp_executesql

@stmt= <statement>,--類似存儲過程主體

@params = <params>, --類似存儲過程參數部分,聲明參數類型

<params assignment> --類似存儲過程調用,為參數賦值,參數值要和參數順序要一一對應,也可以通過為參數指明參數值的方式為其賦值

@stmt參數是輸入的動態批處理,它可以引入輸入參數或輸出參數,和存儲過程的主體語句一樣,只不過它是動態的,而存儲過程是靜態的,不過你也可以在存儲過程中使用sp_executesql;
@params參數與定義輸入/輸出參數的存儲過程頭類似,實際上和存儲過程頭的語法完全一樣;
@<params assignment> 與調用存儲過程的EXEC部分類似。
其實@stmt,@params可以省略,那麼exec sp_executesql的語法就可以簡寫成如下格式:

EXEC sp_executesql
<statement>,
<params>,
<params assignment>

為了說明sp_executesql對執行計劃的管理優於EXEC,我將使用前面討論EXEC時用到的代碼。

代碼
DECLARE @TableName VARCHAR(50),@sql NVARCHAR(MAX),@OrderID INT;
SET @TableName = 'Orders ';
SET @OrderID = 10251;
SET @sql = 'SELECT * FROM '+@TableName + ' WHERE OrderID = @OID ORDER BY ORDERID DESC'
--注意當要對動態sql語句的表名實行參數化時,不可以如下表示:
--set @sql='select * from @TableName where OrderID=@OID ORDER BY Orderid desc',
--如果這樣會提示必須聲明標量變數@TableName,只可以如上面所寫的一樣,將表名@TableName作為變數名進行拼接

EXEC sp_executesql
@sql,
N'@OID int ',
@OID = @OrderID

下面我們看看exec sp_executesql的執行效率,在調用該代碼和檢查它生成的執行計劃前,先清空緩存中的執行計劃;
DBCC FREEPROCCACHE
將上面的動態代碼執行3次,每次執行都賦予@OrderID 不同的值,然後查詢sys.syscacheobjects表,並注意它的輸出,優化器只創建了一個備用計劃,而且該計劃被重用的3次

SELECT cacheobjtype,objtype,usecounts,sql FROM sys.syscacheobjects WHERE sql NOT LIKE '%cache%' AND sql NOT LIKE '%sys.%' AND sql NOT LIKE '%sp_executesql%'

點擊F5運行。
sq_executesql的另一個與其介面有關的強大功能是,你可以使用輸出參數為調用批處理中的變數返回值。利用該功能可以避免用臨時表返回數據,從而得到更高效的代碼和更少的重新編譯。定義和使用輸出參數的語法與存儲過程類似。也就是說,你需要在聲明參數時指定OUTPUT子句。例如,下面的靜態代碼簡單的演示了如何從動態批處理中利用輸出參數@p把值返回到外部批處理中的變數@i.

DECLARE @sql AS NVARCHAR(12),@i AS INT;
SET @sql = N' SET @p = 10';
EXEC sp_executesql
@sql,
N'@p AS INT OUTPUT',
@p = @i OUTPUT
SELECT @i --該代碼返回輸出10

以字母 N 為前綴標識 Unicode 字元串常量
總結以下幾點:
一.使用exce sp_executesql效率比exec要高,同一類型的語句,只需編譯一次即可,而exec執行幾次就需要編譯幾次。
二.構造動態sql的where子句,也就是條件子句時,exec無法使用變數來進行站位,需要將變數轉換成字元串,然後和動態sql進行拼接,這就可能引起Sql注入問題,如下:

SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) +
' WHERE OrderID = '+CAST(@OrderID AS VARCHAR(50)) + ' ORDER BY ORDERID DESC'

而若使用exec sp_executesql則可以使用變數來進行站位,以後再給這個參數傳值的放式構造動態sql,就避免的Sql注入的問題,如下:
SET @sql = 'SELECT * FROM '+@TableName + ' WHERE OrderID = @OID ORDER BY ORDERID DESC'

三.無論是Exec還是Exec sp_executesql,如果想要將表名和列名進行動態參數化,不可以使用表名參數和列名參數來進行站位,而且表名參數和列名參數需要使用存儲過程的參數.對 於exec sp_executesql來說,不可以將表名參數和列名參數在指定為在exec sp_executesql參數聲明部分聲明的參數,如:

代碼
create PROCEDURE GetData
@tbName nvarchar(10),
@colName nvarchar(10),
@Name nvarchar(10)
AS
BEGIN
declare @sql nvarchar(50);
set @sql='select '+ @colName+' from ' +@tbName+ ' where name=@whereName';
--注意此句不可以寫成如下:
-- set @sql='select @colName from @tbName where name=@whereName';
exec sp_executesql
@sql,
N'@whereName nvarchar(10)',
@Name
END

也就是說exec sp_executesql語句的參數聲明部分只能聲明動態sql的where子句的參數。

Ⅵ oceanbase存儲過程怎麼運行

OceanBase的存儲過程是一種邏輯程序,可以完成一組資料庫操瞎迅作,類似於SQL腳本,它被設計用於解決復毀神念雜的資料庫操作問題。存儲過程的運行纖困需要一些特定的步驟:
1. 創建存儲過程:首先,我們需要創建一個存儲過程,它包含一組SQL語句和邏輯結構,用於完成指定的任務。
2. 編譯存儲過程:在完成創建存儲過程後,我們需要編譯它,以檢查語法錯誤,並將其編譯為機器可識別的格式。
3. 調用存儲過程:最後,我們需要調用存儲過程,它將使用提供的輸入參數執行SQL語句,並返回執行結果。

Ⅶ 請問這句sql存儲過程的語句什麼is

1.存儲過程編譯器事先對存儲過程金星了語法檢查處理,避免了因sql語句語法不正確引起運行時出現異常的問題.
2.只在保存存儲過程時資料庫伺服器才進行編譯,以後每次執行存儲過程都不需要再進行重新編譯而一般的sql語句每執行一次就需要資料庫引擎重新編譯一次,所以使用存儲過程可以提高資料庫執行效率(補充:這點很有用,特別是感覺你的程序和資料庫相關有點慢時可以用這點,幫你程序運行的更快)
3.可以在定義存儲過程的時候直接檢查運行的結果是否正確,可視化的設計界面提高了效率.
4.避免了查詢字元串中包含單引號等特殊字元可能會出現的問題
5.一個項目中可能會多處用到相同的sql語句,使用存儲過程便於重用
6.修改靈活方便,當需要修改完成的功能時,只需要修改定義的存儲過程即可,不必單獨修改每一個引用.

Ⅷ sql server 用什麼執行存儲過程語句

執行帶參數的存儲過程的方法如下:
Exec sp_configure 'allow updates',1 --允液指許更新系統表鍵埋盯。
exec dbo.User_ChangeObjectOwnerBatch 'OldOwner','dbo'
以上是兩個例子。
SQL Server中執行帶參數的存儲過程的方法是:
EXEC 存稿和儲過程名字 '參數1','參數2',數值參數
EXEC 是一個關鍵字。
字元串參數使用單引號括起來,數值參數不需要使用單引號

Ⅸ 怎樣在存儲過程中寫exec運行語句

create procre
(
as
delare @sqlstr nvarchar(500)

set @sqlstr='select * from table'

exec(@sqlstr)
)

不知道關正橘帆鍵字是否寫舉雹對,見諒哈。伍敏