當前位置:首頁 » 存儲配置 » mssql存儲過程調用

mssql存儲過程調用

發布時間: 2023-08-05 23:07:25

① mssql中update中批量使用存儲過程執行結果

如果是函數,那麼返回值可以作為結果返回,那麼就是類似這樣的調用:

c=B(a,b),
update A set c=B(a,b);

如果是存儲過程,那麼返回值必然是使用out 參數返回的,那麼只能類似這樣調用:

B(a,b,out c)
顯然是無法像上面的函數式的調用,只能用游標一行一行調用。
或者
在這個存儲過程外面在加一個函數,在函數裡面調用B,然後再像上面直接在sql理解直接調用。

大概意思:
function B1(a,b) return as int
is
c int;
call B(a,b,c);
return c;
end

② SQL Server 如何執行 帶參數的 存儲過程

帶參數的存儲過程執行方法如下:

(1)調用通用數據訪問類:SqlHelper,執行SqlHelper.ExecuteNonQuery()方法

(2)使敬譽春用示例:SqlHelper.ExecuteNonQuery(conn,CommandType.StoredProcere,sqlexec,myparm)

(3)其中傳遞的4個參數如下:

「conn」:為鏈接字元

「CommandType.StoredProcere」:表示要執亮耐行的SQL存儲過程類型

「sqlexec」:要執行的SQL存儲過程

「myparm」:為傳遞的參虛沖數,它需要參數的初始化、賦予參數名稱、設定類型、長度和值等

(4)當ExecuteNonQuery()執行select 查詢時,結果總是返回-1。ExecuteNonQuery()執行Update、Insert和Delete語句時,返回值為該命令所影響的行數。

③ mssql 存儲過程

MS SQL基礎教程:創建存儲過程

在MS SQL Server 2000 中,創建一個存儲過程有兩種方法:一種是使用Transaction-SQL 命令Create Procere, 另一種是使用圖形化管理工具Enterprise Manager。 用Transaction- SQL 創建存儲過程是一種較為快速的方法,但對於初學者,使用Enterprise Manager 更易理解,更為簡單。
當創建存儲過程時,需要確定存儲過程的三個組成部分;
所有的輸入參數以及傳給調用者的輸出參數。 被執行的針對資料庫的操作語句,包括調用其它存儲過程的語句; 返回給調用者的狀態值,以指明調用是成功還是失敗。 12.2.1 使用Enterprise Manager 創建存儲過程
按照下述步驟用Enterprise Manager 創建一個存儲過程:
啟動Enterprise Manager, 登錄到要使用的伺服器。 選擇要創建存儲過程的資料庫,在左窗格中單擊Stored Procere 文件夾,此時在右窗格中顯示該資料庫的所有存儲過程,如圖12-1 所示。 右擊Stored Procere 文件夾,在彈出菜單中選擇New Stored Procere, 此時打開創建存儲過程對話框,

輸入存儲過程正文。 單擊Check Syntax, 檢查語法是否正確。 單擊OK, 保存。 在右窗格中,右擊該存儲過程,在彈出菜單中選擇All task, 選擇
ManagePermissions, 設置許可權,

12.2.2 用CREATE PROCEDURE 命令創建存儲過程
通過運用Create Procere 命令能夠創建存儲過程,在創建存儲過程之前,應該考慮到以下幾個方面:
在一個批處理中,Create Procere 語句不能與其它SQL 語句合並在一起; 資料庫所有者具有默認的創建存儲過程的許可權,它可把該許可權傳遞給其它的用戶; 存儲過程作為資料庫對象其命名必須符合命名規則; 只能在當前資料庫中創建屬於當前資料庫的存儲過程。 用Create Procere 創建存儲過程的語法規則如下:
CREATE PROC [ EDURE ] procere_name [ ; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]
] [ ,...n ]
[ WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
[ FOR REPLICATION ]
AS sql_statement [ ...n ]

④ sqlalchemy 調用 mssql存儲過程如何獲取返回值

請參參考以下代碼:

from pyodbc import drivers, connect, Connection, Cursor

def output_cursor(cursor: Cursor):

...."""列印輸出當前結果集"""

....print('-' * 80)

....print(','.join(_[0] for _ in rst.description))

....for row in cursor:

........print(row)


spt = '''

declare @returns int,@count int,@lastDoTime datetime

exec @returns = test_proc_call @count output,@lastDoTime output

select @returns returns,@count count,@lastDoTime lastDoTime

'''

cur = db.execute(spt)

for rst in iter_cursor(cur):

....output_cursor(rst)


輸出:

--------------------------------------------------------------------------------

returns,count,lastDoTime

(18, 21, datetime.datetime(2020, 3, 4, 14, 43, 46, 923000))


存儲過程:test_proc_call

create procere test_proc_call

(@p1 int output

,@p2 datetime output

)

as

begin

--此過程有返回值,有output參數,有結果集

select @p1=max(id),@p2=max(LastDoTime)

from Tasks with(nolock)

select * from Tasks with(nolock)

return @@rowcount

end

⑤ 如何在oracle 觸發器中執行mssql資料庫中的存儲過程的相關推薦

1:什麼叫存儲過程?
在oracle中,可以在資料庫中定義子程序,這種程序塊叫存儲過程(procere),它存放在數據字典中,可以在不同用戶和應用程序中共享,並可以實現程序的優化和重用。

2:存儲過程的有點?
 過程運行在伺服器端,執行速度快
 過程執行一次後代碼就駐留在高速緩存中,在以後的操作中,直接調用緩存數據。
 確保資料庫的安全性,可以不授權用戶直接訪問應用程序中的一些表,而是授權用戶執行訪問資料庫的過程。
 自動完成需要預先執行的任務,過程可以在系統啟動時自動運行。、

3:存儲過程的創建和執行
用戶存儲過程只能定義在當前資料庫中,可以使用sql語句或OEM創建。
默認情況下,用戶創建的存儲過程歸登錄資料庫的用戶所擁有,DBA可以把許可授權給其他用戶。
Sql命令創建存儲過程
CREATE procere 過程名
【(parameter parameter_mode date_type,….n)】
IS| AS
BEGIN
SQL_STATEMENT
END 過程名
其中
Parameter表示過程的參數。
parameter_mode:參數的類型,過程參數和函數參數一樣,有三種類型IN,OUT,IN OUT
IN 表示參數是輸入給過程的。
OUT表示採納數載過程中被賦值,可以傳給過程的外部。
IN OUT表示可以傳內,可以傳外。

調用存儲過程
直接輸入存儲過程的名字可以執行一個已經定義的存儲過程。

存儲過程的編輯修改
修改存儲過程雖然可以和修改視圖一樣,用ALTER procere,但是他是用來重新編譯和驗證用的,如果要修改過程定義,建議還是用create or replace。

存儲過程的刪除
當某個過程不再需要的時候,應該將其從內存中刪除,以釋放它佔用的資源。
Drop procere 存儲過程名。
Drop procere update_info.

觸發器
觸發器(trigger)是一些過程,與表聯系緊密,用於保護表中的數據,當一個基表被修改時,觸發器自動就會執行。例如出入其可以實現多個表間數據的一致性和完整性。
一般情況下,對表數據的操作有增刪查改,維護數據的觸發器也可以分為多種,每張基表最多可以建立12個觸發器。
1:Before insert 2:before insert fo each row; 3:after inert
4:after insert for each row 5:before update 6:before update for each row
7:after update 8:after update for each row; 9:before delete;
10:before delete for each row 11:after delete 12:after delete for each row.

利用sql語句創建觸發器
語法規則
Create or replace trigger 觸發器名
{before| after| instead of}
{delete 【or insert】【or update】【of column ….n 】}
On 表名|視圖名
【for each row 】[]where condition]]
Sql_statement[,,,n]

參數說明
Instead of :指定在創建替代觸發器。
Of column 指定在哪些列上進行觸發。。。
創建觸發器的限制
1:觸發器中有效的語句可以包括DML語句,但是不能包括DDL,rollback,commit
,savepoint都不適用。

⑥ oracel 通過dblink 調用mssql 存儲過程

ORACLE的DB_LINK不能調用MSSQL的存儲過程,但可以調用遠程ORACLE的存儲過程。

連接到mssql的存儲過程
方法我知道的有兩種
1、把MSSQL的存儲移植到ORACLE裡面,使用本地調用。
2、使用腳本命令調用,比如hostd:xxxxxxxsqlcmd.....

⑦ c#如何調用mssql2005的存儲過程

疑問:1、你的規則是m和n兩個數與1、10、20來對比,在1和10之間是10-m,在10和20之間是n-10,那在20和30之間是n-20嗎?還是30-n?我採用的是n-20;

2、你的數據表裡的三列數據是否是動態的呢,即1、10、20這三個數可能是其他數值?

我的答案:說明:未用你表裡的三列數據,只寫了個存儲過程,並在C#中調用,按你的規則輸出數值。

//按鈕點擊
privatevoidbutton1_Click(objectsender,EventArgse)
{
intm=4;//m和n這兩個數可以在窗體中輸入,這里為了清晰,直接賦值了
intn=18;
intt1=0;//t1、t2、t3為輸出的結果
intt2=0;
intt3=0;
GetNum(m,n,outt1,outt2,outt3);//調用存儲過程方法
textBox1.Text=t1+","+t2+","+t3;//將結果輸出到窗體的textBox中
}

//連接資料庫調用存儲過程
privatevoidGetNum(intm,intn,outintt1,outintt2,outintt3)
{
stringconnstring="server=127.0.0.1\SQLEXPRESS;database=JIN;uid=ruixin;pwd=ruixin";
SqlConnectionconn=newSqlConnection(connstring);
SqlCommandcmd=newSqlCommand("pro_number",conn);//pro_number為存儲過程名稱
conn.Open();
//設置為存儲過程
cmd.CommandType=CommandType.StoredProcere;
//設置參數
cmd.Parameters.Add("@m",SqlDbType.Int);
cmd.Parameters.Add("@n",SqlDbType.Int);
cmd.Parameters.Add("@t1",SqlDbType.Int,10);
cmd.Parameters.Add("@t2",SqlDbType.Int,10);
cmd.Parameters.Add("@t3",SqlDbType.Int,10);
//設置輸出參數類型
cmd.Parameters["@t1"].Direction=ParameterDirection.Output;
cmd.Parameters["@t2"].Direction=ParameterDirection.Output;
cmd.Parameters["@t3"].Direction=ParameterDirection.Output;
//參數賦值
cmd.Parameters["@m"].Value=m;
cmd.Parameters["@n"].Value=n;
//執行
cmd.ExecuteNonQuery();
//輸出參數賦值
t1=Convert.ToInt32(cmd.Parameters["@t1"].Value);
t2=Convert.ToInt32(cmd.Parameters["@t2"].Value);
t3=Convert.ToInt32(cmd.Parameters["@t3"].Value);

conn.Close();
cmd.Dispose();
}
//sqlserver2008資料庫中存儲過程
createprocere[dbo].[pro_number]
(@mint,
@nint,
@t1intoutput,
@t2intoutput,
@t3intoutput)
as
BEGIN
set@t1=0
set@t2=0
set@t3=0
if@mbetween1and10
begin
select@t1=10-@m
end
if@mbetween10and20
begin
select@t2=@m-10
end
if@mbetween20and30
begin
select@t3=@m-20
end
if@nbetween1and10
begin
select@t1=10-@n
end
if@nbetween10and20
begin
select@t2=@n-10
end
if@nbetween20and30
begin
select@t3=@n-20
end
end
熱點內容
電腦存儲內存多少合適 發布:2025-02-02 08:00:15 瀏覽:108
登錄界面android 發布:2025-02-02 07:53:23 瀏覽:840
編譯時註解與運行時註解 發布:2025-02-02 07:53:14 瀏覽:816
怎樣登陸ftp 發布:2025-02-02 07:44:44 瀏覽:632
瘋狂點擊腳本 發布:2025-02-02 07:38:10 瀏覽:73
pss演算法 發布:2025-02-02 07:30:55 瀏覽:748
發信息腳本 發布:2025-02-02 07:03:07 瀏覽:741
l2l3緩存 發布:2025-02-02 06:56:47 瀏覽:524
為什麼安卓下不了蟲蟲助手 發布:2025-02-02 06:46:47 瀏覽:45
ftp伺服器ui 發布:2025-02-02 06:24:15 瀏覽:103