當前位置:首頁 » 數據倉庫 » 存儲過程連接資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

存儲過程連接資料庫

發布時間: 2023-05-21 05:37:17

❶ 利用sql server 資料庫存儲過程連接sybase資料庫

存儲過程(stored
procere)是一組為了完成特定功能的sql
語句集,經戚巧裂編譯後存儲在資料庫。中用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。
在sql
server
的系列版本中存儲過程分為兩類:系寬搜統提供的存儲過程和用戶自定義存儲過程。系統過程主要存儲在master
資料庫中並以sp_為前綴,並且系統存儲過程主要是從系統表中獲取信息,從而為系統管理員管理sql
server
提供支持。通過系統存儲過程,ms
sql
server
中的許多管理性或信息性的活動(如了解資料庫對象、資料庫信息)都可以被順利有效地完成。盡管這些系統存儲過程被放在master
資料庫中,但是仍可以在其它資料庫中對其進行調用,在調高閉用時不必在存儲過程名前加上資料庫名。而且當創建一個新資料庫時,一些系統存儲過程會在新資料庫中被自動創建。用戶自定義存儲過程是由用戶創建並能完成某一特定功能(如查詢用戶所需數據信息)的存儲過程。

❷ C++連接資料庫的時候怎麼調用存儲過程

給個例子給你看下:
...

_CommandPtr m_cmdptr;
m_cmdptr.CreateInstance(__uuidof( Command ) );

_ParameterPtr inParam2=NULL;
_ParameterPtr inParam3=NULL;
_ParameterPtr inParam4=NULL;
_ParameterPtr outParam1=NULL;
_ParameterPtr outParam2=NULL;
_ParameterPtr outParam3=NULL;

inParam2.CreateInstance(__uuidof(Parameter));
inParam3.CreateInstance(__uuidof(Parameter));
inParam4.CreateInstance(__uuidof(Parameter));
outParam1.CreateInstance(__uuidof(Parameter));
outParam2.CreateInstance(__uuidof(Parameter));
outParam3.CreateInstance(__uuidof(Parameter));

m_cmdptr->ActiveConnection=m_pConnection;
m_cmdptr->CommandType=adCmdStoredProc;
m_cmdptr->CommandText=_bstr_t("proc_XXX");//存儲過程的名稱

//輸入參數
inParam2=m_cmdptr->CreateParameter(_bstr_t("@P1"),adVarChar,adParamInput,32,_bstr_t(P1));
m_cmdptr->襪雀Parameters->Append(inParam2);

inParam3=m_cmdptr->CreateParameter(_bstr_t("@P2"),adVarChar,adParamInput,20,_bstr_t(P2));
m_cmdptr->Parameters->Append(inParam3);

//輸出參數
outParam1=m_cmdptr->CreateParameter("@P4",adInteger,adParamOutput,sizeof(int));
m_cmdptr->Parameters->Append(outParam1);
outParam2=m_cmdptr->CreateParameter("@P5",adInteger,adParamOutput,sizeof(int));
m_cmdptr->Parameters->Append(outParam2);
outParam3=m_cmdptr->CreateParameter(_bstr_t("@P6"),adVarChar,adParamOutput,20,_bstr_t(P6));
m_cmdptr->Parameters->Append(outParam3);

//執行

m_cmdptr->Execute(NULL,NULL,adCmdStoredProc);

//取返回值

long p1=m_cmdptr->虧好昌Parameters->GetItem("@P4")->Value;
long p2=m_cmdptr->Parameters->GetItem("@P5")->Value;

VARIANT vtP6 =m_cmdptr->銷扒Parameters->GetItem("@P6")->Value;
if (vtP6.vt != VT_NULL)
strcpy(tp,(_bstr_t)vtP6);

m_cmdptr.Detach;

❸ 關於存儲過程中連接資料庫問題

存儲過程的概念
SQL Server提供了一種方法,它可以將一些固定的操作集中起來由SQL Server資料庫伺服器來完成,以實現某個任務,這種方法就是存儲過程。
存儲過程是SQL語句和可選控制流語句的預編譯集合,存儲在資料庫中,可由應用程序通過一個調用執行,而且允許用戶聲明變數、有條件執行以及其他強大的編程功能。
在SQL Server中存儲過程分為兩類:即系統提供的存儲過程和用戶自定義的存儲過程。

可以出於任何使用SQL語句的目的來使用存儲過程,它具有以下優點:
可以在單個存儲過程中執行一系列SQL語句。
可以從自己的存儲過程內引用其他存儲過程,這可以簡化一系列復雜語句。
存儲過程在創建時即在伺服器上進行編譯,所以執行起來比單個SQL語句快,而且減少網路通信的負擔。
安全性更高。
創建存儲過程

在SQL Server中,可以使用三種方法創建存儲過程 :
①使用創建存儲過程向導創建存儲過程。
②利用SQL Server 企業管理器創建存儲過程。
③使用Transact-SQL語句中的CREATE PROCEDURE命令創建存儲過程。

下面介紹使用Transact-SQL語句中的CREATE PROCEDURE命令創建存儲過程
創建存儲過程前,應該考慮下列幾個事項:
①不能將 CREATE PROCEDURE 語句與其它 SQL 語句組合到單個批處理中。
②存儲過程可以嵌套使用,嵌套的最大深度不能超過32層。
③創建存儲過程的許可權默認屬於資料庫所有者,該所有者可將此許可權授予其他用戶。
④存儲過程是資料庫對象,其名稱必須遵守標識符規則。
⑤只能在當前資料庫中創建存儲過程。
⑥ 一個存儲過程的最大尺寸為128M。

使用CREATE PROCEDURE創建存儲過程的語法形式如下:

QUOTE:
CREATE PROC[EDURE]procere_name[;number][;number]
[{@parameter data_type}[VARYING][=default][OUTPUT]][,...n]
WITH
{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]
[FOR REPLICATION]
AS sql_statement [ ...n ]

用CREATE PROCEDURE創建存儲過程的語法參數的意義如下:

procere_name:用於指定要創建的存儲過程的名稱。
number:該參數是可選的整數,它用來對同名的存儲過程分組,以便用一條 DROP PROCEDURE 語句即可將同組的過程一起除去。
@parameter:過程中的參數。在 CREATE PROCEDURE 語句中可以聲明一個或多個參數。
data_type:用於指定參數的數據類型。
VARYING:用於指定作為輸出OUTPUT參數支持的結果集。
Default:用於指定參數的默認值。
OUTPUT:表明該參數是一個返回參數。

例如:下面創建一個 簡單的存儲過程proctinfo,用於檢索產品信息。
USE Northwind
if exists(select name from sysobjects
where name='proctinfo' and type = 'p')
drop procere proctinfo
GO

create procere proctinfo
as
select * from procts
GO
通過下述sql語句執行該存儲過程:execute proctinfo
即可檢索到產品信息。

執行存儲過程

直接執行存儲過程可以使用EXECUTE命令來執行,其語法形式如下:
[[EXEC[UTE]]
{ [@return_status=]
{procere_name[;number]|@procere_name_var} [[@parameter=]{value|@variable[OUTPUT]|[DEFAULT]}
[,...n]
[ WITH RECOMPILE ]

使用 EXECUTE 命令傳遞單個參數,它執行 showind 存儲過程,以 titles 為參數值。showind 存儲過程需要參數 (@tabname),它是一個表的名稱。其程序清單如下:
EXEC showind titles
當然,在執行過程中變數可以顯式命名:
EXEC showind @tabname = titles
如果這是 isql 腳本或批處理中第一個語句,則 EXEC 語句可以省略:
showind titles或者showind @tabname = titles

下面的例子使用了默認參數
USE Northwind
GO
CREATE PROCEDURE insert_Procts_1
( @SupplierID_2 int,
@CategoryID_3 int,
@ProctName_1 nvarchar(40)='無')
AS INSERT INTO Procts
(ProctName,SupplierID,CategoryID)
VALUES
(@ProctName_1,@SupplierID_2,@CategoryID_3)
GO
exec insert_Procts_1 1,1
Select * from Procts where SupplierID=1 and CategoryID=1
GO

下面的例子使用了返回參數
USE Northwind
GO
CREATE PROCEDURE query_procts
( @SupplierID_1 int,
@ProctName_2 nvarchar(40) output)
AS
select @ProctName_2 = ProctName from procts
where SupplierID = @SupplierID_1

執行該存儲過程來查詢SupplierID為1的產品名:
declare @proct nvarchar(40)
exec query_procts 1,@proct output
select '產品名'= @proct
go

查看存儲過程
存儲過程被創建之後,它的名字就存儲在系統表sysobjects中,它的源代碼存放在系統表syscomments中。可以使用使用企業管理器或系統存儲過程來查看用戶創建的存儲過程。

使用企業管理器查看用戶創建的存儲過程

在企業管理器中,打開指定的伺服器和資料庫項,選擇要創建存儲過程的資料庫,單擊存儲過程文件夾,此時在右邊的頁框中顯示該資料庫的所有存儲過程。用右鍵單擊要查看的存儲過程,從彈出的快捷菜單中選擇屬性選項,此時便可以看到存儲過程的源代碼。

使用系統存儲過程來查看用戶創建的存儲過程

可供使用的系統存儲過程及其語法形式如下:
sp_help:用於顯示存儲過程的參數及其數據類型
sp_help [[@objname=] name]
參數name為要查看的存儲過程的名稱。
sp_helptext:用於顯示存儲過程的源代碼
sp_helptext [[@objname=] name]
參數name為要查看的存儲過程的名稱。
sp_depends:用於顯示和存儲過程相關的資料庫對象
sp_depends [@objname=]』object』
參數object為要查看依賴關系的存儲過程的名稱。
sp_stored_proceres:用於返回當前資料庫中的存儲過程列表

修改存儲過程

存儲過程可以根據用戶的要求或者基表定義的改變而改變。使用ALTER PROCEDURE語句可以更改先前通過執行 CREATE PROCEDURE 語句創建的過程,但不會更改許可權,也不影響相關的存儲過程或觸發器。其語法形式如下:
ALTERPROC[EDURE]procere_name[;number]
[{@parameterdata_type}
[VARYING][=default][OUTPUT]][,...n] [WITH
{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]
[FOR REPLICATION]
AS
sql_statement [ ...n ]

重命名和刪除存儲過程

1. 重命名存儲過程
修改存儲過程的名稱可以使用系統存儲過程sp_rename,其語法形式如下:
sp_rename 原存儲過程名稱,新存儲過程名稱
另外,通過企業管理器也可以修改存儲過程的名稱。

刪除存儲過程

刪除存儲過程可以使用DROP命令,DROP命令可以將一個或者多個存儲過程或者存儲過程組從當前資料庫中刪除,其語法形式如下:
drop procere {procere} [,…n]
當然,利用企業管理器也可以很方便地刪除存儲過程。

存儲過程的重新編譯

在我們使用了一次存儲過程後,可能會因為某些原因,必須向表中新增加數據列或者為表新添加索引,從而改變了資料庫的邏輯結構。這時,需要對存儲過程進行重新編譯,SQL Server提供三種重新編譯存儲過程的方法 :
1、在建立存儲過程時設定重新編譯
語法格式:CREATE PROCEDURE procere_name WITH RECOMPILE AS sql_statement
2、在執行存儲過程時設定重編譯
語法格式: EXECUTE procere_name WITH RECOMPILE
3、通過使用系統存儲過程設定重編譯
語法格式為: EXEC sp_recompile OBJECT

系統存儲過程與擴展存儲過程

1.系統存儲過程
系統存儲過程存儲在master資料庫中,並以sp_為前綴,主要用來從系統表中獲取信息,為系統管理員管理SQL Server提供幫助,為用戶查看資料庫對象提供方便。比如用來查看資料庫對象信息的系統存儲過程sp_help、顯示存儲過程和其它對象的文本的存儲過程sp_helptext等。

2.擴展存儲過程:
擴展存儲過程以xp_為前綴,它是關系資料庫引擎的開放式數據服務層的一部分,其可以使用戶在動態鏈接庫(DLL)文件所包含的函數中實現邏輯,從而擴展了Transact-SQL的功能,並且可以象調用Transact-SQL過程那樣從Transact-SQL語句調用這些函數。
例: 利用擴展存儲過程xp_cmdshell為一個操作系統外殼執行指定命令串,並作為文本返回任何輸出。
執行代碼:
use master
exec xp_cmdshell 'dir *.exe'
執行結果返回系統目錄下的文件內容文本信息。

最後給大家舉一個例子:

QUOTE:
/**
1、 在Northwind資料庫中,創建一個帶查詢參數的存儲過程,
要求在輸入一個定購金額總額@total時,查詢超出該值的所
有產品的相關信息,包括產品名稱和供應商名稱、單位數量、
單價、以及該產品的定購金額總額,並通過一個輸出參數返回
滿足查詢條件的產品數
**/

IF exists (select * from SysObjects where name='more_than_total' and type='p')
drop procere more_than_total
go
CREATE PROCEDURE More_Than_Total
@total money = 0
AS
Declare @amount smallint
BEGIN
select distinct
P.proctName,
S.contactName,
P.UnitPrice

from Procts P inner join [order Details] O
on p.proctID=o.proctID inner join suppliers s
on p.supplierID=s.SupplierID
where O.proctID in
(select proctID
from [order Details]
group by proctId
having sum(quantity*unitprice)>@total
)
END
GO

❹ C++連接資料庫的時候怎麼調用存儲過程

給個例子給你看下:
...
_CommandPtr
m_cmdptr;
m_cmdptr.CreateInstance(__uuidof(
Command
)
);
_ParameterPtr
inParam2=NULL;
_ParameterPtr
inParam3=NULL;
_ParameterPtr
inParam4=NULL;
_ParameterPtr
outParam1=NULL;
_ParameterPtr
outParam2=NULL;
_ParameterPtr
outParam3=NULL;
inParam2.CreateInstance(__uuidof(Parameter));
inParam3.CreateInstance(__uuidof(Parameter));
inParam4.CreateInstance(__uuidof(Parameter));
outParam1.CreateInstance(__uuidof(Parameter));
outParam2.CreateInstance(__uuidof(Parameter));
outParam3.CreateInstance(__uuidof(Parameter));
m_cmdptr->ActiveConnection=m_pConnection;
m_cmdptr->CommandType=adCmdStoredProc;
m_cmdptr->CommandText=_bstr_t("proc_XXX");//存儲過程的名稱
//輸入參數
inParam2=m_cmdptr->CreateParameter(_bstr_t("@P1"),adVarChar,adParamInput,32,_bstr_t(P1));
m_cmdptr->Parameters->Append(inParam2);
inParam3=m_cmdptr->CreateParameter(_bstr_t("@P2"),adVarChar,adParamInput,20,_bstr_t(P2));
m_cmdptr->Parameters->Append(inParam3);
//輸出參數
outParam1=m_cmdptr->CreateParameter("@P4",adInteger,adParamOutput,sizeof(int));
m_cmdptr->Parameters->Append(outParam1);
outParam2=m_cmdptr->CreateParameter("@P5",adInteger,adParamOutput,sizeof(int));
m_cmdptr->Parameters->Append(outParam2);
outParam3=m_cmdptr->CreateParameter(_bstr_t("@P6"),adVarChar,adParamOutput,20,_bstr_t(P6));
m_cmdptr->Parameters->Append(outParam3);
//執行
m_cmdptr->Execute(NULL,NULL,adCmdStoredProc);
//取返回值
long
p1=m_cmdptr->Parameters->GetItem("@P4")->Value;
long
p2=m_cmdptr->Parameters->GetItem("@P5")->Value;
VARIANT
vtP6
=m_cmdptr->Parameters->GetItem("@P6")->Value;
if
(vtP6.vt
!=
VT_NULL)
strcpy(tp,(_bstr_t)vtP6);
m_cmdptr.Detach;

❺ 怎麼在oracle存儲過程連接其他資料庫

如果都是oracle資料庫,可以創建好dblink,然後睜如李使用dblink來連接遠程的oracle資料庫。
如果target不悉遲是oracle資料庫,則需要其他比如透明網關等技術的支持了橡乎。

❻ 怎麼把本地的存儲過程導入oracle到資料庫

從伺服器將ORACLE資料庫導出和導入本地oracle資料庫中的方法
一:將伺服器上的ORACLE資料庫導入到本地機子寬絕上;
具體方法:
在CMD模式下執行以下命令
exp username/password@伺服器端資料庫ID file=c:/文件名.dmp
例如下面:
exp djyy/djyy@zhwx file=c:/djyy20090921.dmp
exp wxzd/wxzd@zhwx file=c:/wxzd20090921.dmp
二:建立本地oracle資料庫
具體方法:
點擊開始->程序->Oracle - OraDb10g_home1->配置和移植工具->Database Configuration Assistant.

運行後點擊下一步,磨塵選擇創建資料庫->next->選擇一般用途->填寫自己的資料庫名->next-->填寫口令,選擇同一口令吧,當然你也可以為每個用戶填寫不同的口令,以後基本上默認安裝吧。安裝完成後退出即可。

三:建立用戶,並賦予DBA許可權
具體方法:
在剛建立的本地資料庫中,用慎游姿DBA的許可權賬戶進入,然後建立自己的用戶,並賦予DBA等許可權;
具體實例代碼:
1. SQL> conn sys/change_on_install as sysdba;
2. 已連接。
3. SQL> create user username identified by password;
4. users;
5.
6. 用戶已創建。
7. SQL> grant create session,create table,create view to username
8. 授權成功。
9. SQL>grant DBA to uername;
10. 授權成功。

四:導入oracle資料庫
具體方法:
在CMD模式下執行以下命令
imp 用戶/密碼 file=*.dmp commit=y full=y

❼ asp.net用存儲過程連接資料庫進行操作需要在資料庫中寫存儲過程么

你沒連接資料庫怎麼使用資料庫的
存盯配租儲過程

只能是連接好資料庫以後,調用資料庫中已經存在的存儲凱兆過程吧。configurationManager這個裡面保存的只是一些連接字元串的信息,其實就是一個字元串。放在這里只是為了方便配置資料庫信息。真正連接資料庫的,還是你SqlConnection這個東賣納西的

❽ 怎樣創建SQLSERVER 存儲過程,連接多個遠程資料庫查詢相同結構表的數據!如果遠程SQL伺服器則不查詢

存儲過程是建立單個資料庫的基礎上的,我還沒見到過一個存儲過程可以訪問別的數據的,
所以只能是在本資料庫中對表進行檢索。
你可以在你程序中建立所有連接資料庫的連接字元串,例:在web.config中建立
而且這樣方便管理

❾ SQL資料庫如何通過存儲過程訪問遠程MySQL資料庫

SQL code
--訪問不同電腦慎敬上的資料庫(遠程只要聯好網數帆就一樣)
--如果經常訪問薯孝雹或數據量大,建議用鏈接伺服器
--創建鏈接伺服器
exec sp_addlinkedserver 'srv_lnk ', ' ', 'SQLOLEDB ', '遠程伺服器名或ip地址 '
exec sp_addlinkedsrvlogin 'srv_lnk ', 'false ',null, '用戶名 ', '密碼 '
go
--查詢示例
select * from srv_lnk.資料庫名.dbo.表名
--導入示例
select * into 表 from srv_lnk.資料庫名.dbo.表名
go
--處理完成後刪除鏈接伺服器
exec sp_dropserver 'srv_lnk ', 'droplogins '