存储过程

在ASP.NET中调用存储过程方法

会有一股神秘感。 提交于 2020-03-06 05:37:21
两种不同的存储过程调用方法   为了突出新方法的优点,首先介绍一下在.NET中调用存储过程的“官方”方法。另外,本文的所有示例程序均工作于SqlServer数据库上,其它情况类似,以后不再一一说明。本文所有例子均采用C#语言。   要在应用程序中访问数据库,一般性的步骤是:首先声明一个数据库连接SqlConnection,然后声明一个数据库命令SqlCommand,用来执行SQL语句和存储过程。有了这两个对象后,就可以根据自己的需要采用不同的执行方式达到目的。需要补充的是,不要忘记在页面上添加如下的引用语句:using System.Data.SqlClient。   就执行存储过程来说,如果执行的是第一类存储过程,那么就要用一个DataAdapter将结果填充到一个DataSet中,然后就可以使用数据网格控件将结果呈现在页面上了;如果执行的是第二和第三种存储过程,则不需要此过程,只需要根据特定的返回判定操作是否成功完成即可。   (1)执行一个没有参数的存储过程的代码如下: SqlConnection conn=new SqlConnection(“connectionString”); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = new SqlCommand(); da.SelectCommand

xml参数存储过程

风格不统一 提交于 2020-03-06 05:34:21
在项目中,需要将一个DataGrid中的信息传入数据库进行更新,前提是无法使用DataAdapter,请教了师傅,才知道了还有xml参数这个东东可以完成这个任务。 存储过程如下: CREATE PROCEDURE dbo.UP_TestProc ( @XML TEXT , @DataSetName VARCHAR ( 100 ) , @DataTableName VARCHAR ( 100 ) ) AS SET NOCOUNT ON DECLARE @RowPattern VARCHAR ( 300 ) SET @RowPattern = ' / ' + @DataSetName + ' / ' + @DataTableName DECLARE @idoc INT EXEC sp_xml_preparedocument @idoc OUTPUT, @XML SELECT Column1, Column2 INTO #tmpTable FROM OPENXML ( @idoc , @RowPattern , 2 ) WITH ( Column1 INT Column1 CHAR (4) ) EXEC sp_xml_removedocument @idoc INSERT INTO Table1( [ Column1 ] , [ Column2 ] ) SELECT Column1,

存储过程和函数

自闭症网瘾萝莉.ら 提交于 2020-03-06 01:31:19
创建存储过程 :使用 CREATE PROCEDURE语句。 格式: CREATE PROCEDURE p_name ( p_parameter [ ] ) [ characteristics . . . ] routin_body 说明:CREATE PROCEDURE是用来创建存储函数的关键字;p_name 存储过程的名字。 p_parameter是参数列表,形式如下 [IN | OUT | INOUT] p_parameter TYPE IN表示输入参数,OUT表示输出参数,INOUT既表示输入也表示输出 ,type 参数类型 例子: CREATE PROCEDURE p_name ( ) BEGIN SELECT * FROM fruits ; END ; 此存储过程没有参数,BEGIN,END 限定存储过程体。 创建存储函数 :使用 CREATE FUNCTION func_name ( [ func_param ] ) RETURNS type [ characteristics . . . ] routin_body 例子: CREATE FUNCTION func_name ( ) RETURNS VARCHAR ( 50 ) RETURN ( SELECT f_name FROM fruits ) ; 变量 : 变量可以在子程序中声明并使用

第八章、数据库后台编程技术

佐手、 提交于 2020-03-06 01:07:00
第八章、数据库后台编程技术 内容提要: 1、掌握存储过程的定义与使用 2、掌握用户定义函数的创建与使用 3、掌握触发器的定义与使用 4、掌握游标的定义与使用 第一节 存储过程 1、基本概念 使用T-SQL语言编写代码时,有两种方式存储和执行代码: (1)在客户端存储代码,通过客户端程序或SQL命令向DBMS发出操作请求,由DBMS将结果返回给用户程序。 (2)以子程序的形式将程序模块存储在数据库中,供有权限的用户通过调用反复执行。 存储过程 :即存储在数据库中供所有用户程序调用的子程序。 存储过程分为三类 系统存储过程 用户自定义存储过程(如果没有说明的话默认) 扩展存储过程 用户自定义存储过程 是由用户创建并能完成某一特定功能(如查询用户所需数据信息)的存储过程。本节将详细介绍用户自定义的存储过程。 以下三个存储过程即为用户自定义存储过程: 扩展存储过程 是 SQL Server 可以动态装载并执行的动态链接库 (DLL)。扩展存储过程使您得以使用象 C 这样的编程语言创建自己的外部例程。对用户来说,扩展存储过程与普通存储过程一样,执行方法也相同。 存储过程的优点 ① 极高的执行效率。(所有的命令都是以批处理的方式处理) ② 增强代码的重用性和共享性。 ③ 使用存储过程可以减少网络流量。 ④ 使用存储过程保证安全性。 ⑤ 在大型数据库中,应用程序访问数据库的最主要方式就是存储过程

[Java面试十二]数据库概念相关

南楼画角 提交于 2020-03-05 12:54:02
1. 什么是存储过程?它有什么优点? 答:存储过程是一组予编译的 SQL 语句, 它的优点有: 允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次。 允许更快执行,如果某操作需要执行大量 SQL 语句或重复执行,存储过程比 SQL 语句执行的要快。 减少网络流量,例如一个需要数百行的 SQL 代码的操作有一条执行语句完成,不需要在网络中发送数百行代码。 更好的安全机制,对于没有权限执行存储过程的用户,也可授权他们执行存储过程。 2. oracle的 存储过程和函数有什么区别? Oracle 中的函数与存储过程的 区别 : A: 函数必须有返回值 , 而过程没有 . B: 函数可以单独执行 . 而过程必须通过 execute 执行 . C: 函数可以嵌入到 SQL 语句中执行 . 而过程不行 . 其实我们可以将比较复杂的查询写成函数 . 然后到存储过程中去调用这些函数 . Oracle 中的函数与存储过程的 特点 : A. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。 B. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象。 C. 存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于 FROM 关键字的后面。 3. 什么是事务? 答

赋予oracle执行存储过程权限和创建表权限

久未见 提交于 2020-03-05 10:20:22
grant create any table to username; grant create any procedure to username; grant execute any procedure to username; 创建执行JOB权限 grant create job to 用户; grant manage scheduler to 用户; 给一个表的读取权限 grant select on 表名 to 用户名; 删除修改权限 alter是有truncate权限 GRANT SELECT,INSERT,UPDATE,DELETEGRANT SELECT,INSERT,UPDATE,DELETE,alter 删除读取所有表的权限 Revoke select any table from 用户名; 创建表权限 grant resource to common_user -- grant create table to common_user -- grant select any table to common_user; 获取某个用户下的全部表 select 'grant select on '|| tname ||' to 用户名;' from tab where tname not like 'BIN%'; 来源: https://www.cnblogs.com

mysql存储过程和函数

社会主义新天地 提交于 2020-03-04 18:17:15
存储过程和函数 类似于Java中的方法,提高代码的重用性,简化操作。 存储过程 一组预先编译好的SQL语句的集合。减少了编译次数、数据库服务器的连接次数,提高效率。 存储过程的创建 CREATE PROCEDURE 存储过程名 ( 参数列表 ) BEGIN SQL 处理逻辑 ; END 参数列表: 参数模式 参数名 参数类型 举例: IN name VARCHAR ( 20 ) 参数模式: IN:传入参数,调用需要传入值。 OUT:传出参数,可以作为返回值 INOUT:该参数既可以作为输入也可以作为返回参数使用。 如果存储过程中只是包含一句话,BEGIN END可以省略。 存储过程中的每条SQL语句结尾必须加 “;” 调用存储过程 CALL 存储过程名 ( 参数列表 ) ; 空参列表存储过程使用案例 插入到student表中3条记录, 以下语句需要在 CMD命令窗口登录Mysql ,然后操作。 调用,注意这里必须以== = = 符 号 结 束 , 因 为 声 明 的 时 候 就 是 以 = = ==符号结束,因为声明的时候就是以== = = 符 号 结 束 , 因 为 声 明 的 时 候 就 是 以 = = ==结尾的。 查看数据是否插入 创建带IN模式参数的存储过程 案例:根据传入的name参数,查询对应的年龄 CREATE PROCEDURE myp4 ( IN stuname

Oracle存储过程跨用户执行查询报错

北城以北 提交于 2020-03-04 15:29:50
在 Oracle 中,在USERA下编写一个存储过程,该存储过程中引用了另一个用户USERB下的表或视图对象。编译该存储过程,出现编译错误。报ORA-00942: table or view does not exist。 但是该表或视图的确在USERB下存在,而且已经授予了USERA DBA角色的权限,即可以查询任何用户下的表或视图。将存储过程中的该报错语句复制粘贴到SQL窗口中执行,不报错。为什么放在存储过程中会报上述错误呢? 经过研究,发现ORACLE对于在存储过程中引用其他用户下的表或视图对象有特别的限制,要求USERA对这个表或视图具有直接的SELECT权限,而不是通过角色,如DBA间接获取的权限。否则就会报上述错误导致编译不通过。 解决该问题的方法如下: 1.登录到USERB用户下。 2.GRANT SELECT ON 表名(或视图名) TO USERA 3.重新登录到USERA用户下。 4.重新编译存储过程,发现编译通过。问题解决。 来源: https://www.cnblogs.com/Doson/p/6122703.html

sql server 2005 T-SQL @@REMSERVER (Transact-SQL)

妖精的绣舞 提交于 2020-03-04 13:12:22
重要提示: 下一版本的 Microsoft SQL Server 将删除该功能。请不要在新的开发工作中使用该功能,并尽快修改当前还在使用该功能的应用程序。 改为使用链接服务器和链接服务器存储过程。 返回远程 SQL Server 数据库服务器在登录记录中显示的名称。 Transact-SQL 语法约定 语法 @@REMSERVER 返回类型 nvarchar(128 ) 备注 使用 @@REMSERVER,存储过程可以检查其运行所在的数据库服务器的名称。 示例 以下示例将创建返回远程服务器名称的过程 usp_CheckServer 。 复制代码 CREATE PROCEDURE usp_CheckServer AS SELECT @@REMSERVER; 以下存储过程是在本地服务器 SEATTLE1 上创建的。用户登录到远程服务器 LONDON2 上,然后运行 usp_CheckServer 。 复制代码 EXEC SEATTLE1...usp_CheckServer 下面是结果集: 复制代码 --------------- LONDON2 来源: https://www.cnblogs.com/czh-liyu/archive/2007/12/22/1010197.html

SQLSERVER存储过程基本语法

筅森魡賤 提交于 2020-03-04 08:29:08
转自: http://www.cnblogs.com/SunShineYPH/archive/2011/12/13/2285570.html 一、定义变量 view source print ? --简单赋值 declare @a int set @a=5 print @a --使用select语句赋值 declare @user1 nvarchar(50) select @user1= '张三' print @user1 declare @user2 nvarchar(50) select @user2 = Name from ST_User where ID=1 print @user2 --使用update语句赋值 declare @user3 nvarchar(50) update ST_User set @user3 = Name where ID=1 print @user3 二、表、临时表、表变量 view source print ? --创建临时表1 create table #DU_User1 ( [ID] [ int ] NOT NULL , [Oid] [ int ] NOT NULL , [Login] [nvarchar](50) NOT NULL , [Rtx] [nvarchar](4) NOT NULL , [ Name ] [nvarchar]