当前位置:首页 » 存储配置 » 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 09:48:54 浏览:427
群晖怎么玩安卓模拟器 发布:2025-02-02 09:45:23 浏览:552
三星安卓12彩蛋怎么玩 发布:2025-02-02 09:44:39 浏览:738
电脑显示连接服务器错误 发布:2025-02-02 09:24:10 浏览:531
瑞芯微开发板编译 发布:2025-02-02 09:22:54 浏览:141
linux虚拟机用gcc编译时显示错误 发布:2025-02-02 09:14:01 浏览:227
java驼峰 发布:2025-02-02 09:13:26 浏览:646
魔兽脚本怎么用 发布:2025-02-02 09:10:28 浏览:527
linuxadobe 发布:2025-02-02 09:09:43 浏览:207
sql2000数据库连接 发布:2025-02-02 09:09:43 浏览:721