當前位置:首頁 » 服務存儲 » 面試問寫存儲過程遇到的問題
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

面試問寫存儲過程遇到的問題

發布時間: 2023-02-18 17:10:06

資料庫實習生面試遇到的技術問題有哪些問題

主要有:
a.關系型資料庫理論基礎;
b.如果資料庫是Oracle,那隊PL/sql的掌握程度如何,還可以當場舉個例子,讓應聘者用紙寫下來;如果資料庫是MS SQL,那麼對T-SQL掌握程度如何,同PL/SQL類似,舉例實現;
c.同一個問題,分別用PL/SQL和Oracle實現;
d.編程基礎如何,對C/Java的掌握如何,還有很多細節,暫不展開;
e.PL/SQL和T-SQL的游標有什麼不一樣;
f.重點問PL/SQL或者T-SQL的存儲過程、函數;
g.遇到一個新的問題,該從哪些方面尋求幫助,或者解決思路

㈡ 面試題不會做(寫個存儲過程)

給你寫個簡單的刪除的存儲過程
Create proc Pro_delete
(@ID int)
as
delete from 表名 where ID=@ID
go

就這樣啊

㈢ 關於存儲過程的疑問!!求幫助!!

首先,存儲過程在執行的時候不需要預編譯,就速度上來說占優勢
另外,存儲過程相當於開發中的封裝,內部的查詢邏輯對於程序來說是不需要知道的,這樣在你的數據結構或者查詢邏輯有改動的時候,不會影響到程序這點是非常好的
再者,在很多查詢中我們需要連接很多表或者變數或者其它的時候,我們用存儲過程可以將臨時表,變數等鎖定在存儲過程中,它們的生命周期僅存在於存儲過程的執行期內不會影響到其它的應用
其它好處有很多,不一一列舉了。。

前台調用的話要看開發工具了,工具不同執行方式不同

在SQL的查詢分析器中可以直接調用
例如:exec procName 參數,參數(注意字元串或者時間都要加'',例如:'1988-12-14','參數1')

如果有不明白的地方可以給我留言

㈣ Java面試題 在存儲過程中可以實現的業務,在Java業務層都可以是實現,為什麼還要寫存儲過程。

業務層描述的是業務的流程,如果將業務寫入sp,那麼復用性會大大降低。同時在業務層實現業務時可以靈活配置事務,而sp比較難做。

㈤ 面試問 說說對Oracle存儲過程的理解,應該從哪方面說呢

首先從功能上講procere能完成純SQL完成不了的事情,比如需要一些結構化的語言,循環等等
其次可以說說存儲過程於自定義函數的區別,函數只有一個輸出值,procere功能更多
第三說說運用,存儲過程方便用於job調用,便於每天自動後台執行完成自定義batch的需要

這樣說肯定就ok了,還有什麼不懂的可以追問

㈥ Oracle 存儲過程面試題

提供參考
DECLARE
BEGIN
mergeINTOt17_organt1
USINGt40_organt2
ONt1.organno=t2.organno
WHENmatchedTHEN
UPDATE
SETt1.organname=t2.organname,
t1.organlevel=t2.organlevel,
t1.uporgankey=t2.uporgankey,
t1.flag=t2.flag;
COMMIT;
END;
/

㈦ 存儲過程如何使用

問題一: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)......>>

㈧ 資料庫存儲過程有哪些,面試題

資料庫存儲過程有哪些
/*
系統存儲過程很多,有些常用,有些不常用
常用:
sp_attach_db 附加資料庫到一個伺服器中
sp_columns 返回在當前環境中列的信息
sp_databases 列出當前系統中的資料庫
sp_configure 顯示或修改當前伺服器的全局配置
sp_depends 顯示資料庫對象的依賴信息
sp_executesql 執行動態的T-SQL語句
sp_help 報告有關資料庫對象的信息
sp_helpdb 返回指定資料庫或全部資料庫的信息
sp_helptext 顯示規則、默認值、存儲過程、觸發器、視圖等的未加密的文本定義信息
sp_indexes 返回指定遠程表的索引信息
sp_lock 返回有關鎖的信息
sp_password 增加或者修改指定login的口令
sp_rename 更改用戶創建的資料庫對象名稱
sp_renamedb 更改資料庫名稱
sp_spaceused 顯示資料庫的空間使用情況
sp_tables 返回在當前環境中可以被查詢的對象的列表
sp_who 提供當前用戶和進程的信息
不常用:
sp_addlinkedserver 創建一個允許執行分布式查詢的鏈接伺服器
sp_addlinkedsrvlogin 在本地伺服器和遠程伺服器之間創建login帳戶的映射關系
sp_addlogin 創建一個新的login帳戶
sp_add_agent_parameter 在代理文件中增加一個參數
sp_add_agent_profile 為復制代理增加一個代理文件
sp_add_alert 創建一個警報
sp_add_category 在伺服器上,增加一種作業、警報或者操作員的特定分類
sp_add_data_file_recover_suspect_db 當資料庫復原不能完成時,向文件組增加一個數據文件
sp_add_file_recover_suspect_db 對於復原有問題的資料庫增加一個文件
sp_add_job 增加一個sql server agent可以執行的作業
sp_add_jobschele 為作業創建調度
sp_add_jobserver 把指定的作業增加到指定伺服器上
sp_add_jobstep 在作業中增加一步或一個操作
sp_add_log_file_recover_suspect_db 當資料庫復原不能完成時,向文件組增加一個日誌文件
sp_add_notification 為警報創建一個通知
sp_add_operator 為警報或者作業創建一個操作員
sp_add_targetservergroup 增加指定的伺服器組
sp_add_targetsvrgrp_member 在指定的目標伺服器組增加一個目標伺服器
sp_addalias 在資料庫中為login帳戶增加一個別名
sp_addapprole 在資料庫中增加一個特殊的應用程序角色
sp_addarticle 創建文章,並把該文章添加到出版物中
sp_adddistpublisher 創建一個使用本地分布伺服器的出版伺服器
sp_adddistributiondb 在分布伺服器上創建一個新的distribution資料庫
sp_adddistributor 增加一個分布伺服器
sp_addextendedproc 在系統中增加一個擴展存儲過程
sp_addgroup 在當前資料庫中增加一個組
sp_addmergearticle 為一個已有的合並出版物創建一個文章
sp_addmergefilter 為了連接另外一個表,創建一個合並過濾器
sp_addmergepublication 創建一個新的合並出版物
sp_addmergepullsubscription 增加一個拉回類型的訂閱物
sp_addmergepullsubscription_agent 在訂閱伺服器上,為合並拉回訂閱物創建一個代理
sp_addmergesubscription 創建一個推出或者拉回類型的訂閱物
sp_addmessage 在系統中增加一個新的錯誤消息
sp_addpublicaton 創建一個快照復制或者事務復制出版物
sp_addpublicaton_snapshot 創建一個快照代理
sp_addpullsusscription 在當前訂閱伺服器的資料庫中增加一個拉回或者匿名訂閱物
sp_addpullsusscription_agent 在訂閱伺服器的資料庫中增加一個新的代理
sp_addremotelogin 在本地伺服器上增加一個遠程login帳戶,允許執行遠程存儲過程調用
sp_addrole 在當前資料庫中增加一個角色
sp_addrolemember 為當前資料庫中的一個角色增加一個安全性帳戶
sp_addserver 添加一個遠程或者本地伺服器
sp_addsrvrolemember 為固定的伺服器角色增加一個成員
sp_addsubscriber 增加一個新的訂閱伺服器
sp_addsubscriber_schele 為分布代理和合並代理增加一個調度
sp_addsubscription 訂閱文章並且設置訂閱伺服器的狀態
sp_addsynctrigers 在訂閱伺服器上創建一個立即修改觸發器
sp_addtabletocontents 在合並跟蹤表中插入一個參考
sp_addtype 創建一個用戶定義的數據類型
sp_admpdevice 增加一個備份設備
sp_adser 在當前資料庫中為一個新用戶增加一個安全性帳戶
sp_altermessage 修改錯誤信息的狀態
sp_addly_job_to_targets 把作業應用到一個或者多個目標伺服器
sp_approlepassword 在當前資料庫中改變應用程序角色的口令
sp_aarticle_validation 為指定的文章初始化確認請求
sp_aarticlecolumn 指定在文章中使用的列
sp_aarticlefilter 創建一個用於水平過濾數據的過濾器
sp_articleview 當表被過濾時,為文章創建一個同步化對象
sp_attach_single_file_db 在當前伺服器中,附加一個只有一個數據文件的資料庫
sp_aautostats 對於一個指定的索引或統計,自動顯示update statistics的狀態
sp_bindefault 把默認值綁定到列或用戶定義的數據類型上
sp_bindrule 把規則綁定到列或用戶定義的數據類型上
sp_bindsession 綁定或解除綁定與實例中的其它事務的連接
sp_browsereplcmds 在分布資料庫中返回一種可讀格式的結果集
sp_catalogs 返回指定連接伺服器中的系統目錄列表,在本地伺服器中等價於資料庫列表
sp_certify_removable 確認在可移動介質上用於分布的資料庫是否正確配置
sp_change_agent_parameter 修改復制代理配置使用的參數
sp_change_agent_profile 修改復制代理配置使用的配置參數
sp_change_users_login 修改login與當前資料庫中用戶之間的關系
sp_changearticle 改變文章的屬性
sp_changedbowner 改變當前資料庫的所有者
sp_changedistpublisher 改變分布出版伺服器的屬性
sp_changedistributor_password 改變分布伺服器的口令
sp_changedistributor_property 改變分布伺服器的屬性
sp_changedistribtutiondb 改變分布資料庫的屬性
sp_changegroup 改變安全性帳戶所屬的角色
sp_changemergearticle 改變合並文章的屬性
sp_changemergefilter 改變一些合並過濾器的屬性
sp_changemergepublication 改變合並出版物的屬性
sp_changemergepullsubscription 改變合並拉回出版物的屬性
sp_changemergesubscription 改變合並的推出或者拉回出版物的屬性
sp_changeobjectowner 改變對象的所有者
sp_changepublication 改變出版物的屬性
sp_changesubscriber 改變用於訂閱伺服器的選項
sp_changesubscriber_schele 改變用於分布式代理和事務代理的訂閱伺服器的調度
sp_changesubstatus 改變訂閱伺服器的狀態
sp_column_privileges 返回列的許可權信息
sp_column_privileges_ex 返回在鏈接伺服器上指定表的列的許可權信息
sp_columns_ex 返回在鏈接伺服器上列的信息
sp_create_removable 創建一個可移動介質資料庫
sp_createstats 創建單列的統計信息
sp_cursor 用於請求定位更新
sp_cursor_list 報告當前打開的伺服器游標屬性
sp_cursorclose 關閉和釋放游標
sp_cursorfetch 從游標中取出數據行
sp_cursoropen 定義與游標和游標選項相關聯的 SQL 語句,然後填充游標
sp_cursoroption 用於設置各種游標選項
sp_cycle_errorlog 關閉錯誤日誌文件重新開始錯誤記錄
sp_datatype_info 返回當前環境支持的數據類型信息
sp_dbfixedrolepermission 顯示每一個固定資料庫角色的許可
sp_dboption 顯示或修改資料庫選項
sp_dbremove 刪除資料庫和與該資料庫相關的所有文件
sp_defaultdb 設置登錄帳戶的默認資料庫
sp_defaultlanguage 設置登錄帳戶的默認語言
sp_delete_alert 刪除警報
sp_delete_backuphistory 刪除備份和恢復的歷史信息
sp_delete_category 刪除指定類型的作業、警報和操作員
sp_delete_job 刪除一個作業
sp_delete_jobschele 刪除作業的調度
sp_delete_jobserver 刪除指定的目標伺服器
sp_delete_jobstep 從作業中刪除指定的作業步驟
sp_delete_notfication 刪除發送給某個操作員的所有通知
sp_delete_operator 刪除操作員
sp_delete_targetserver 從可以使用的目標伺服器列表中刪除指定的伺服器
sp_delete_targetservergroup 刪除指定的目標伺服器組
sp_delete_targetsvrgrp_member 從目標伺服器組中刪除一個目標伺服器
sp_deletemergeconflictrow 刪除沖突表中的記錄行
sp_denylogin 防止window用戶或群組連接到 sql server
sp_describe_cursor 報告伺服器游標的屬性
sp_describe_cursor_columns 報告在伺服器游標的結果集中列的屬性
sp_describe_cursor_tables 報告伺服器游標參考的基表信息
sp_detach_db 分享伺服器中的資料庫
sp_drop_agentparameger 刪除配置文件中的一個或者多個參數
sp_drop_profile 刪除配置文件
sp_dropalias 刪除一個帳戶的別名
sp_dropapprole 刪除當前資料庫中的應用程序角色
sp_droparticle 從出版物中刪除一篇文章
sp_dropdevice 刪除資料庫或者備份設備
sp_dropdistpublisher 刪除出版伺服器
sp_dropdistributiondb 刪除分布資料庫
sp_dropdistributor 刪除分布伺服器
sp_dropdropextendedproc 刪除一個擴展存儲過程
sp_dropgroup 從當前資料庫中刪除角色
sp_droplinkedsrvlogin 刪除一個本地伺服器和連接伺服器的映射帳戶
sp_droplogin 刪除一個登錄帳戶
sp_dropmergearticle 從合並出版物中刪除一篇文章
sp_dropmergefilter 刪除一個合並過濾器
sp_dropmergepublication 刪除一個合並出版物和與其相關的快照復制
sp_dropmergepullsubscription 刪除一個合並拉回訂購物
sp_dropmergesubscription 刪除一個訂閱物
sp_dropmessage 刪除一個消息
sp_droppublication 刪除出版物和與其相關的文章
sp_droppullsubscription 刪除當前訂閱伺服器資料庫中的訂閱物
sp_dropremotelogin 刪除一個遠程登錄帳戶
sp_droprole 從當前資料庫中刪除一個角色
sp_droprolemember 從當前資料庫中的一個角色中刪除一個安全性帳戶
sp_dropserver 刪除一個遠程或者連接伺服器列表中的伺服器
sp_dropsrvrolemember 從一個固定的伺服器角色中刪除一個帳戶
sp_dropsubscriber 刪除一個訂閱伺服器
sp_dropsubscription 刪除訂閱物
sp_droptype 刪除一種用戶定義的數據類型
sp_dropuser 從當前資料庫中刪除一個用戶
sp_dropdropwebtask 刪除以前版本定義的web任務
sp_dsninfo 從一個與當前伺服器相關的分布伺服器返回ODBC和OLE DB數據源的信息
sp_mpparamcmd 返回存儲在分布資料庫中的參數化命令的詳細信息
sp_enumcodepages 返回一個字元集和代碼頁的列表
sp_enumcustomresovers 返回所有可用的定製解決方案表表
sp_enumdsn 返回所有可用的odbc和ole db數據源列表
sp_enumfullsubscribers 返回訂閱伺服器的列表
sp_expired_subscription_cleanup 周期性地檢查訂閱物的狀態是否失效
sp_fkeys 返回當前環境的外鍵信息
sp_foreignkeys 返回參照連接伺服器的表的主鍵的外鍵
sp_fulltext_catalog 創建和刪除全文本目錄
sp_fulltext_column 指定某一個列是否參加全文本索引
sp_fulltext_database 從當前資料庫中初始化全文本索引
sp_fulltext_service 改變Microsoft Search Service屬性
sp_fulltext_table 標記用於全文本索引的表
sp_generatefilters 在外鍵表上創建一個過濾器
sp_get_distributor 確定一個分布伺服器是否安裝在某個伺服器上
sp_getbindtoken 創建一個綁定的連接文本
sp_getmergedeletype 返回合並刪除的類型
sp_grant_publication_access 在出版物的訪問列表中增加一個用戶
sp_grantdbaccess 在當前資料庫中增加一個安全性帳戶
sp_grantlogin 允許Windows用戶或群組連接到 SQL Server
sp_help_agent_default 檢索作為參數傳送的代理類型的默認配置的標識號
sp_help_agent_parameter 返回代理配置的所有參數
sp_help_agent_profile 返回指定代理的配置
sp_help_alert 報告有關警報的信息
sp_help_category 提供有關作業、警報、操作員的指定種類的信息
sp_help_downloadlist 列出有關作業的信息
sp_help_fulltext_catalogs 返回有關全文本索引表的信息
sp_help_fulltext_columns 返回標記全文本索引的列信息
sp_help_fulltext_columns_cursor 使用游標檢索標記為全文本的索引列
sp_help_fulltext_tables 返回標記為全文本索引的表
sp_help_fulltext_tables_cursor 使用游標返回標記為全文本索引的表
sp_help_job 返回有關作業的信息
sp_help_jobhistory 提供有關作業的歷史信息
sp_help_jobschele 返回作業的調度信息
sp_help_jobserver 返回給定作業的伺服器信息
sp_help_jobstep 返回作業的步驟信息
sp_help_operator 返回有關操作員的信息
sp_help_publication_access 返回可以訪問指定出版物的帳戶列表
sp_help_targetserver 列出全部目標伺服器
sp_help_targetservergroup 列出指定伺服器組中的全部目標伺服器
sp_helparticle 顯示有關文章的信息
sp_helpconstraint 返回有關約束的類型、名稱等信息
sp_helpdbfixedrole 返回固定的伺服器角色的列表
sp_helpdevice 返回有關資料庫文件的信息
sp_helpdistpublisher 返回充當分布伺服器的出版伺服器的屬性
sp_helpdistributiondb 返回分布資料庫的屬性信息
sp_helpdistributor 列出分布伺服器、分布資料庫、工作目錄等信息
sp_helpextendproc 顯示當前定義的擴展存儲過程信息
sp_helpfile 返回與當前資料庫相關的物理文件信息
sp_helpfilegroup 返回與當前資料庫相關的文件組信息
sp_helpgroup 返回當前資料庫中的角色信息
sp_helpindex 返回有關表的索引信息
sp_helplanguage 返回有關語言的信息
sp_helplinkedsrvlogin 返回鏈接伺服器中映射的帳戶信息
sp_helplogins 返回有關login和與其相關的資料庫用戶信息
sp_helpmergearticle 返回有關合並文章的信息
sp_helpmergearticleconflicts 返回有關沖突的出版物中的文章信息
sp_helpmergeconflictrows 返回在指定沖突表中的行
sp_helpmergefilter 返回有關合並過濾器的信息
sp_helpmergepublication 返回有關合並出版物的信息
sp_helpmergepullsubscription 返回有關拉回訂閱物的信息
sp_helpmergesubscription 返回有關推出訂閱物的信息
sp_help_notification 報告對於給定操作員的警報信息
sp_helppublication 返回有關出版物的信息
sp_helprole 返回當前資料庫中的角色信息
sp_helprolemember 返回當前資料庫中角色成員的信息
sp_helprotect 返回有關用戶許可的信息
sp_helpserver 顯示特定遠程或者復制伺服器的信息
sp_helpsort 顯示系統的排列順序和字元集的信息
sp_helpsrvrole 顯示系統中的固定伺服器角色列表
sp_helpsrvrolemember 顯示系統中的固定伺服器角色成員的信息
sp_helpsubscrberinfo 顯示有關訂閱伺服器的信息
sp_helpsubscription 顯示有特定出版物等有關的訂閱物信息
sp_helpsubscription_properties 檢索安全性信息
sp_helptrigger 顯示觸發器的類型
sp_helpuser 顯示當前資料庫中的用戶、Windows NT用戶和組、角色等信息
sp_indexoption 為用戶定義的索引設置選項
sp_link_publication 設置立即修改訂閱伺服器的同步化觸發器使用的配置和安全性信息
sp_linkedservers 返回在本地伺服器上定義的鏈接伺服器的列表
sp_makewebtask 創建一個執行html文檔的任務
sp_manage_jobs_by_login 刪除或者重新指定屬於login的作業
sp_mergemmyupdate 製作用於合並復制的修改備份
sp_mergesubscription_cleanup 刪除元數據
sp_monitor 顯示系統的統計信息
sp_msx_defect 從多個伺服器操作中刪除當前伺服器
sp_msx_enlist 增加當前伺服器到可用的目標伺服器列表中
sp_pkeys 返回某個表的主鍵信息
sp_post_msx_operation 插入一些目標伺服器可以執行的信息
sp_primarykeys 返回主鍵列的信息
sp_processmail 使用擴展存儲過程修改郵件信息
sp_procoption 設置或者顯示過程選項
sp_publication_validation 初始化文章校驗請求
sp_purge_jobhistory 刪除作業的歷史記錄
sp_recompile 使存儲過程和觸發器在下一次運行時重新編譯
sp_refreshsubscriptions 在拉回出版物中增加訂閱物到文章中
sp_refreshview 刷新指定視圖的元數據
sp_reinitmergepullsubscription 標記一個合並拉回訂閱
sp_reiniteergesubscription 標記一個合並訂閱
sp_reinitpullsubscription 標記一個事務訂閱或者匿名訂閱
sp_reinitsubscription 重新初始化訂閱
sp_remoteoption 顯示或者修改遠程登錄帳戶的選項
sp_remove_job_from_targets 從給定的目標伺服器中刪除指定的作業
sp_removedbreplication 從資料庫中刪除所有的復制對象
sp_replcounters 返回復制的統計信息
sp_repldone 修改伺服器做的分布事務的統計信息
sp_replflush 處理文章的高速緩沖存儲區
sp_replication_agent_checkup 檢查每一個分布資料庫
sp_replicationdboption 在當前資料庫中設置復制資料庫的選項
sp_replsetoriginator 用於在事務復制中檢測循環登錄
sp_replshowcmds 返回標記復制的事務命令
sp_repltrans 返回在出版資料庫事務日誌中的所有事務的結果集
sp_resetstatus 重新設置異常資料庫的形態
sp_resync_targetserver 重新同步所有的多伺服器作業
sp_revoke_publication_access 從出版資料庫的訪問列表中刪除login帳戶
sp_revokedbaccess 從當前資料庫中刪除安全性帳戶
sp_revokelogin 刪除系統的login帳戶
sp_script_synctran_commands 生成一個可以用於立即修改訂閱物的腳本
*/

㈨ 面試官問執行存儲過程需要多久,該怎麼回答啊

回答:
存儲過程的執行時間,要看過程體內各個事務執行操作的時間,以及過程體本身邏輯的復雜程度。另外還要看過程體中所操作的對象的數量級,操作對象數量多需要的時間長,操作對象數量少需要的時間短。

㈩ 面試常問的資料庫問題及答案

目前在職場中很難找到非常合格的資料庫開發人員。有人說:「SQL開發是一門語言,它很容易學,但是很難掌握。」
在面試應聘的SQL Server資料庫開發人員時,我運用了一套標準的基準技術問題。下面這些問題是我覺得能夠真正有助於淘汰不合格應聘者的問題。它們按照從易到難的順序排列。當你問到關於主鍵和外鍵的問題時,後面的問題都十分有難度,因為答案可能會更難解釋和說明,尤其是在面試的情形下。
你能向我簡要敘述一下SQL Server 2000中使用的一些資料庫對象嗎?
你希望聽到的答案包括這樣一些對象:表格、視圖、用戶定義的函數,以及存儲過程;如果他們還能夠提到像觸發器這樣的對象就更好了。如果應聘者不能回答這個基本的問題,那麼這不是一個好兆頭。
NULL是什麼意思?
NULL(空)這個值是資料庫世界裡一個非常難纏的東西,所以有不少應聘者會在這個問題上跌跟頭您也不要覺得意外。
NULL這個值表示UNKNOWN(未知):它不表示「」(空字元串)。假設您的SQL Server資料庫里有ANSI_NULLS,當然在默認情況下會有,對NULL這個值的任何比較都會生產一個NULL值。您不能把任何值與一個 UNKNOWN值進行比較,並在邏輯上希望獲得一個答案。您必須使用IS NULL操作符。

什麼是索引?SQL Server 2000里有什麼類型的索引?
任何有經驗的資料庫開發人員都應該能夠很輕易地回答這個問題。一些經驗不太多的開發人員能夠回答這個問題,但是有些地方會說不清楚。
簡單地說,索引是一個數據結構,用來快速訪問資料庫表格或者視圖里的數據。在SQL Server里,它們有兩種形式:聚集索引和非聚集索引。聚集索引在索引的葉級保存數據。這意味著不論聚集索引里有表格的哪個(或哪些)欄位,這些欄位都會按順序被保存在表格。由於存在這種排序,所以每個表格只會有一個聚集索引。非聚集索引在索引的葉級有一個行標識符。這個行標識符是一個指向磁碟上數據的指針。它允許每個表格有多個非聚集索引。
什麼是主鍵?什麼是外鍵?
主鍵是表格里的(一個或多個)欄位,只用來定義表格里的行;主鍵里的值總是唯一的。外鍵是一個用來建立兩個表格之間關系的約束。這種關系一般都涉及一個表格里的主鍵欄位與另外一個表格(盡管可能是同一個表格)里的一系列相連的欄位。那麼這些相連的欄位就是外鍵。
什麼是觸發器?SQL Server 2000有什麼不同類型的觸發器?
讓未來的資料庫開發人員知道可用的觸發器類型以及如何實現它們是非常有益的

觸發器是一種專用類型的存儲過程,它被捆綁到SQL Server 2000的表格或者視圖上。在SQL Server 2000里,有INSTEAD-OF和AFTER兩種觸發器。INSTEAD-OF觸發器是替代數據操控語言(Data Manipulation Language,DML)語句對表格執行語句的存儲過程。例如,如果我有一個用於TableA的INSTEAD-OF-UPDATE觸發器,同時對這個表格執行一個更新語句,那麼INSTEAD-OF-UPDATE觸發器里的代碼會執行,而不是我執行的更新語句則不會執行操作。
AFTER觸發器要在DML語句在資料庫里使用之後才執行。這些類型的觸發器對於監視發生在資料庫表格里的數據變化十分好用。
您如何確一個帶有名為Fld1欄位的TableB表格里只具有Fld1欄位里的那些值,而這些值同時在名為TableA的表格的Fld1欄位里?
這個與關系相關的問題有兩個可能的答案。第一個答案(而且是您希望聽到的答案)是使用外鍵限制。外鍵限制用來維護引用的完整性。它被用來確保表格里的欄位只保存有已經在不同的(或者相同的)表格里的另一個欄位里定義了的值。這個欄位就是候選鍵(通常是另外一個表格的主鍵)。
另外一種答案是觸發器。觸發器可以被用來保證以另外一種方式實現與限制相同的作用,但是它非常難設置與維護,而且性能一般都很糟糕。由於這個原因,微軟建議開發人員使用外鍵限制而不是觸發器來維護引用的完整性。
對一個投入使用的在線事務處理表格有過多索引需要有什麼樣的性能考慮?
你正在尋找進行與數據操控有關的應聘人員。對一個表格的索引越多,資料庫引擎用來更新、插入或者刪除數據所需要的時間就越多,因為在數據操控發生的時候索引也必須要維護。
你可以用什麼來確保表格里的欄位只接受特定范圍里的值?
這個問題可以用多種方式來回答,但是只有一個答案是「好」答案。您希望聽到的回答是Check限制,它在資料庫表格里被定義,用來限制輸入該列的值。
觸發器也可以被用來限制資料庫表格里的欄位能夠接受的值,但是這種辦法要求觸發器在表格里被定義,這可能會在某些情況下影響到性能。因此,微軟建議使用Check限制而不是其他的方式來限制域的完整性。
<b?返回參數和output參數之間的區別是什麼?>如果應聘者能夠正確地回答這個問題,那麼他的機會就非常大了,因為這表明他們具有使用存儲過程的經驗。
返回參數總是由存儲過程返回,它用來表示存儲過程是成功還是失敗。返回參數總是INT數據類型。
OUTPUT參數明確要求由開發人員來指定,它可以返回其他類型的數據,例如字元型和數值型的值。(可以用作輸出參數的數據類型是有一些限制的。)您可以在一個存儲過程里使用多個OUTPUT參數,而您只能夠使用一個返回參數。
什麼是相關子查詢?如何使用這些查詢?
經驗更加豐富的開發人員將能夠准確地描述這種類型的查詢。
相關子查詢是一種包含子查詢的特殊類型的查詢。查詢里包含的子查詢會真正請求外部查詢的值,從而形成一個類似於循環的狀況。</b?返回參數和output參數之間的區別是什麼?>