解答:MySQL支持存储过程,但它的语法与MS SQL的存在差异滑肢激,所以,MS SQL里的存储过程不经过修正,在MySQL里是不能用的。
备注提醒:
1、因为它们都使用标准的SQL语法,所以,语法差别不是非常大,语句原则更是基本相同,所以,对于单个的不太复杂的存储过程来说,进行修正的工作量不会太大。
2、但信袜如果是一个复杂的系统,有几十甚至上千的存储过程,一饥稿个一个,一句一句去修正的话,工作量可能就会很大,甚至可怕。
‘贰’ SQL Server 存储过程的几种常见写法分析
一、多数指令是相同的,包括创建和修正存储过程的指令。
二、很多细微的指令有不同,具体如下(不仅):
1 mysql支持enum,和set类型,sql server不支持
2 mysql不支持nchar,nvarchar,ntext类型
3 mysql的递增语句是AUTO_INCREMENT,而mssql是identity(1,1)
MYSQL:create table basic(id int key auto_increment,name varchar(20));
MSSQL: create table basic(id int identity(1,1) , name varchar(20))
4 msms默认到处表创建语句的默认值表示是((0)),而在mysql里面是不允许带两括号的
5 mysql需要为表指定存储类型
6 mssql识别符是[],[type]表示他区别于关键字(可选用来包含表名、字段名),但是mysql却是 `(重音符,也就是按键1左边的那个符号)
7 mssql支持getdate()方法获取当前时间日期,但是mysql里面可以分日期类型和时间类型,获取当前日期是cur_date(),当前完整时间是 now()函数
8 mssql不支持replace into 语句,但是在最新的sql20008里面,也支持merge语法
9 mysql支持insert into table1 set t1 = ‘’, t2 = ‘’ ,但是mssql不支持这样写
10 mysql插入多行支持这样写 insert into tabl1 values (1,1), (1,1), (1,1), (1,1), (1,1), (1,1), (1,1) MSSQL不支持
11 mssql不支持limit语句,是非常遗憾的,只能用top 取代limt 0,N,row_number() over()函数取代limit N,M
12 mysql在创建表时要为每个表指定一个存储引擎类型,而mssql只支持一种存储引擎
13 mysql不支持默认值为当前时间的datetime类型(mssql很容易做到),在mysql里面是用timestamp类型
14 mssql里面检查是否有这个表再删除,需要这样:
if
exists (select * from dbo.sysobjects where id =
object_id(N'uc_newpm') and OBJECTPROPERTY(id, N'IsUserTable')
= 1)
但是在mysql里面只需要 DROP TABLE IF EXISTS cdb_forums;
15 mysql支持无符号型的整数,那么比不支持无符号型的mssql就能多出一倍的最大数存储
16 mysql不支持在mssql里面使用非常方便的varchar(max)类型,这个类型在mssql里面既可做一般数据存储,也可以做blob数据存储
17
mysql创建非聚集索引只需要在创建表的时候指定为key就行,比如:KEY displayorder (fid,displayorder)
在mssql里面必须要:create unique nonclustered index
index_uc_protectedmembers_username_appid on dbo.uc_protectedmembers
(username asc,appid asc)
18 mysql text字段类型不允许有默认值
19mysql的一个表的总共字段长度不超过65XXX。
20一个很表面的区别就是mysql的安装特别简单,而且文件大小才110M(非安装版),相比微软这个庞然大物,安装进度来说简直就是.....
21mysql的管理工具有几个比较好的,mysql_front,和官方那个套件,不过都没有SSMS的使用方便,这是mysql很大的一个缺点。
22mysql的存储过程只是出现在最新的版本中,稳定性和性能可能不如mssql。
23 同样的负载压力,mysql要消耗更少的CPU和内存,mssql的确是很耗资源。
24php连接mysql和mssql的方式都差不多,只需要将函数的mysql替换成mssql即可。
25mysql支持date,time,year类型,mssql到2008才支持date和time。
26变量赋值
MYsql:变量赋值SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop
MSsql:变量赋值SELECT @min_price=MIN(price),@max_price=MAX(price) FROM shop
三、总的来说,如果是简单的存储过程代码,要修改,不会太难。如果是复杂的系统,要移植会很难很难。
‘叁’ sql server存储过程的参数有哪些类型
SQL Server存储过程是SQL数据库的重要组成部分,其中可以用到许多参数。在SQL Server存储过程中,支持输入(Input)、输出参数(Output),也支持返回值参数(ReturnValue)。
返回值参数不是一个形参,而类似于编程中的返回值类型。它都是通过Return语句来返回的,而且在SQL Server中,必须返回INT型的数据,而且很显然,只能有一个返回值,因为RETURN语句其实是会终止SQL Server存储过程的。
例子:
ALTERPROCEDURE[dbo].[GetCustomers]
(@rowcountINTOUTPUT)
AS
SELECT[CustomerID]
,[CompanyName]
,[ContactName]
,[ContactTitle]
,[Address]
,[City]
,[Region]
,[PostalCode]
,[Country]
,[Phone]
,[Fax]
FROM[Northwind].[dbo].[Customers]
SET@rowcount=@@rowcount
‘肆’ MySql支持不支持触发器及存储过程
当然支持了
MySQL没有一种存储过程(Stored Procere)语言,这是对习惯于企业级数据库的程序员的最大限制。多语句SQL命令必须通过客户虚姿颤方代码来协调,这种情差败形是借助于相当健全的查询语言和赋予册蔽客户端锁定和解锁表的能力,这样才允许的多语句运行。
关于MySql更多 你看看
http://www.dorla.com/info/1302.htm
‘伍’ sql server 存储过程
在执行存储过程时,我们常遇到执行超时的情况。如果是因为要处理的数据过多,修改流程复杂等原因的话,如以用以下方法解决:在存储过程的处理工作中加上事务管理:SET TRANSACTION ISOLATION LEVEL REPEATABLE READ --->要这行
BEGIN TRAN /* 这里是程序处理代码段*/commit transaction
QuitWithRollback:
IF (@@TRANCOUNT > 0)
BEGIN
ROLLBACK TRANSACTION
END 以下是事务相关的知识:BEGIN TRANSACTION--开始事务DECLARE @errorSun INT --定义错误计数器SET @errorSun=0 --没错为0UPDATE a SET id=232 WHERE a=1 --事务操作SQL语句SET @errorSun=@errorSun+@@ERROR --累计是否有错UPDATE aa SET id=2 WHERE a=1 --事务操作SQL语句SET @errorSun=@errorSun+@@ERROR --累计是否有错IF @errorSun<>0 BEGIN PRINT '有错误,回滚'ROLLBACK TRANSACTION--事务回滚语句END ELSE BEGIN PRINT '成功,提交'COMMIT TRANSACTION--事务提交语句END1.什么是事务:事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是做为最小的控制单元来使用的。他包含的所有数据库操作命令作为一个整体一起向系提交或撤消,这一组数据库操作命令要么都执行,要么都不执行。2.事务的语句开始事物:BEGIN TRANSACTION 提交事物:COMMIT TRANSACTION 回滚事务:ROLLBACK TRANSACTION3.事务的4个属性①原子性(Atomicity):事务中的所有元素作为一个整体提交或回滚,事务的个元素是不可分的,事务是一个完整操作。②一致性(Consistemcy):事物完成时,数据必须是一致的,也就是说,和事物开始之前,数据存储中的数据处于一致状态。保证数据的无损。③隔离性(Isolation):对数据进行修改的多个事务是彼此隔离的。这表明事务必须是独立的,不应该以任何方式以来于或影响其他事务。④持久性(Durability):事务完成之后,它对于系统的影响是永久的,该修改即使出现系统故障也将一直保留,真实的修改了数据库4.事务的保存点 SAVE TRANSACTION 保存点名称 --自定义保存点的名称和位置 ROLLBACK TRANSACTION 保存点名称 --回滚到自定义的保存点 二事例 所谓事务是指一组逻辑操作单元,它使数据从一种状态变换到另一种状态。包括四个特性:1、原子性 就是事务应作为一个工作单元,事务处理完成,所有的工作要么都在数据库中保存下来,要么完全回滚,全部不保留2、一致性 事务完成或者撤销后,都应该处于一致的状态3、隔离性 多个事务同时进行,它们之间应该互不干扰.应该防止一个事务处理其他事务也要修改的数据时, 不合理的存取和不完整的读取数据4、持久性 事务提交以后,所做的工作就被永久的保存下来 示例:创建一个存储过程,向两个表中同时插入数据Create proc RegisterUser(@usrName varchar(30),@usrPasswd varchar(30),@age int,@sex varchar(10),@PhoneNum varchar(20),@Address varchar(50) )as beginbegin traninsert into userinfo(userName,userPasswd)values(@usrName,@usrPasswd)if @@error<>0begin rollback tranreturn -1endinsert into userdoc(userName,age,sex,PhoneNumber,Address)values(@Usrname,@age,@sex,@PhoneNum,@Address)if @@error<>0begin rollback tranreturn -1endcommit tranreturn 0end事务的分类按事务的启动与执行方式,可以将事务分为3类:显示事务 也称之为用户定义或用户指定的事务,即可以显式地定义启动和结束的事务。分布式事务属于显示事务自动提交事务默认事务管理模式。如果一个语句成功地完成,则提交该语句;如果遇到错误,则回滚该语句。隐性事务当连接以此模式进行操作时,sql将在提交或回滚当前事务后自动启动新事务。无须描述事务的开始,只需提交或回滚每个事务。它生成连续的事务链。一、显示事务通过begin transacton、commit transaction、commit work、rollback transaction或rollback work等语句完成。1、启动事务格式:begin tran 事务名或变量 with mark 描述2、结束事务格式:commit tran 事务名或变量 (事务名与begin tran中的事务名一致或commit work 但此没有参数3、回滚事务 rollback tran 事务名或变量 | savepoint_name | savepoint_variable 或rollback work 说明:清除自事务的起点或到某个保存点所做的所有数据修改4、在事务内设置保存点格式:save tran savepoint_name | savepoint_variable 示例:use bookdbgobegin tran mytraninsert into book values(9,"windows2000',1,22,'出版社')save tran mysavedelete book where book_id=9rollback tran mysavecommit trangoselect * from bookgo可以知道,上面的语句执行后,在book中插入了一笔记录,而并没有删除。因为使用rollback tran mysave 语句将操作回滚到了删除前的保存点处。5、标记事务格式:with mark 例:使用数据库标记将日志恢复到预定义时间点的语句 在事务日志中置入一个标记。请注意,被标记的事务至少须提交一个更新,以标记该日志。BEGIN TRAN MyMark WITH MARK UPDATE pubs.dbo.LastLogMark SET MarkTime = GETDATE() COMMIT TRAN MyMark 按照您常用的方法备份事务日志。BACKUP LOG pubs TO DISK='C:/Backups/Fullbackup.bak' WITH INIT 现在您可以将数据库恢复至日志标记点。首先恢复数据库,并使其为接受日志恢复做好准备。 RESTORE DATABASE pubs FROM DISK=N'C:/Backups/Fullbackup.bak' WITH NORECOVERY 现在将日志恢复至包含该标记的时间点,并使其可供使用。请注意,STOPAT在数据库正在执行大容量日志时禁止执行。 RESTORE LOG pubs FROM DISK=N'C:/Backups/Logbackup.bak' WITH RECOVERY, STOPAT='02/11/2002 17:35:00'5、不能用于事务的操作创建数据库 create database 修改数据库 alter database 删除数据库 drop database 恢复数据库 restore database 加载数据库 load database 备份日志文件 backup log 恢复日志文件 restore log 更新统计数据 update statitics 授权操作 grant 复制事务日志 mp tran 磁盘初始化 disk init 更新使用sp_configure后的系统配置 reconfigure二、自动提交事务 sql连接在begin tran 语句启动显式事务,或隐性事务模式设置为打开之前,将以自动提交模式进行操作。当提交或回滚显式事务,或者关闭隐性事务模式时,将返回到自动提交模式。示例: 由于编译错误,使得三个insert都没执行use testgocreate table testback(cola int primary key ,colb char(3))goinsert into testback values(1,'aaa')insert into testback values(2,'bbb')insert into testback value(3,'ccc')goselect * from testbackgo 没有任何结果返回三、隐式事务通过 API 函数或 Transact-SQL SET IMPLICIT_TRANSACTIONS ON 语句,将隐性事务模式设置为打开。下一个语句自动启动一个新事务。当该事务完成时,再下一个 Transact-SQL 语句又将启动一个新事务。当有大量的DDL 和DML命令执行时会自动开始,并一直保持到用户明确提交为止,切换隐式事务可以用SET IMPLICIT_TRANSACTIONS 为连接设置隐性事务模式.当设置为 ON 时,SET IMPLICIT_TRANSACTIONS 将连接设置为隐性事务模式。当设置为 OFF 时,则使连接返回到自动提交事务模式 语句包括: alter table insert open create delete revoke drop select fetch truncate table grant update 示例: 下面使用显式与隐式事务。它使用@@tracount函数演示打开的事务与关闭的事务:use testgoset nocount oncreate table t1(a int)goinsert into t1 values(1)goprint '使用显式事务'begin traninsert into t1 values(2)print '事务外的事务数目:'+cast(@@trancount as char(5))commint tranprint '事务外的事务数目:'+cast(@@trancount as char(5))goprintgoset implicit_transactions on go print '使用隐式事务'goinsert into t1 values*4)print'事务内的事务数目:'+cast(@@trancount as char(5))commint tran print'事务外的事务数目:'+cast(@@trancount as char(5))go执行结果: 使用显示事务事务内的事务数目:2 事务外的事务数目:1 使用隐式事务事务内的事务数目:1 事务外的事务数目:0四、分布式事务跨越两个或多个数据库的单个sql server中的事务就是分布式事务。与本地事务区别:必须由事务管理器管理,以尽量避免出现因网络故障而导致一个事务由某些资源管理器成功提交,但由另一些资源管理器回滚的情况。 sql server 可以由DTc microsoft distributed transaction coordinator 来支持处理分布式事务,可以使用 BEgin distributed transaction 命令启动一个分布式事务处理 分二阶段:A 准备阶段 B 提交阶段执行教程:1、sql 脚本或应用程序连接执行启动分布式事务的sql语句2、执行该语句的sql在为事务中的主控服务器3、脚本或应用程序对链接的服务器执行分布式查询,或对远程服务器执行远程存储过程。4、当执行了分布式查询或远程过程调用后,主控服务器将自动调用msdtc以便登记分布式事务中链接的服务器和远程服务器5、当脚本或应用程序发出commit或rollback语句时,主控sql将调用msdtc管理两阶段提交过程,或者通知链接的服务器和远程服务器回滚其事务。
‘陆’ SQL中存储过程是干什么用的
存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
数据库存储过程的实质就是部署在数据库端的一组定义代码以及SQL。将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。
每个参数名前要有一个“@”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE外,其他SQL Server所支持的数据类型都可使用。
(6)sqludrl支持存储过程吗扩展阅读:
SQL中存储过程优点:
1、重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。
2、减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
3、安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。
4、存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
‘柒’ SQL 中存储过程怎么使用
一、简单的储存过程:
1、创建一个存储过程
create procere GetUsers()
begin
select * from user;
end;12345
2、调用存储过程
call GetUsers();12
3、删除存储过程
drop procere if exists GetUsers;
二、带参数的存储过程
1、MySql 支持 IN (传递给存储过程) , OUT (从存储过程传出) 和 INOUT (对存储过程传入和传出) 类型的参数 , 存储过程的代码位于 BEGIN 和 END 语句内 , 它们是一系列 SQL 语句 , 用来检索值 , 然后保存到相应的变量 (通过指定INTO关键字) ;
2、下面的存储过程接受三个参数 , 分别用于获取用户表的最小 , 平均 , 最大分数 , 每个参数必须具有指定的类型 , 这里使用十进制值(decimal(8,2)) , 关键字 OUT 指出相应的参数用来从存储过程传出
create procere GetScores(
out minScore decimal(8,2),
out avgScore decimal(8,2),
out maxScore decimal(8,2)
)
begin
select min(score) into minScore from user;
select avg(score) into avgScore from user;
select max(score) into maxScore from user;
end;1234567891011
3、调用此存储过程 , 必须指定3个变量名(所有 MySql 变量都必须以@开始) , 如下所示 :
call GetScores(@minScore, @avgScore, @maxScore);12
4、该调用并没有任何输出 , 只是把调用的结果赋给了调用时传入的变量@minScore, @avgScore, @maxScore, 然后即可调用显示该变量的值 :
select @minScore, @avgScore, @maxScore;
5、使用 IN 参数 , 输入一个用户 id , 返回该用户的名字 :
create procere GetNameByID(
in userID int,
out userName varchar(200)
)
begin
select name from user
where id = userID
into userName;
end;12345678910
6、调用存储过程 :
call GetNameByID(1, @userName);
select @userName;123
‘捌’ 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 <procere_option> [ ,n ]
[ FOR REPLICATION ]
AS { <sql_statement> [;][ n ] | <method_specifier> }
[;]
<procere_option> ::=
[ ENCRYPTION ]
[ RECOMPILE ]
[ EXECUTE_AS_Clause ]
<sql_statement> ::=
{ [ BEGIN ] statements [ END ] }
<method_specifier> ::=
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 发生错误。 执行:Exec yangyang8848.AllGoods 正确执行。 [;Number]: 用于对同名过程进行分组的可选整数。使用一个 DROP PROCEDURE 语句可将这些分组过程一起删除。 例如: Create Proc S1 ;1
AS
Select * From Master_Goods
Go
Create Proc S1 ;2
As
Select * From Master_Location
Go 创建完毕了两个存储过程。它们在同一个组S1里,如果执行Exec S1 则存储过程默认执行 Exec S1 ;1 。如果我们想得到所有据点信息则需要执行Exec S1 ;2。当我们要删除存储过程的时候,只能执行Drop Exec S1 则该组内所有的存储过程被删除。 [@ parameter]: 存储过程中的参数,除非将参数定义的时候有默认值或者将参数设置为等于另一个参数,否则用户必须在调用存储过程的时候为参数赋值。 存储过程最多有2100个参数。 例如: Create Proc yangyang8848.OneGoods
@GoodsCode varchar(10)
As
Select * From Master_Goods Where GoodsCode = @GoodsCode
Go 调用的代码: Declare @Code varchar(10)
Set @Code = '0004'
Exec yangyang8848.OneGoods @Code 在参数的后边加入Output 表明该参数为输出参数。 Create Proc yangyang8848.OneGoods
@GoodsCode2 varchar(10) output,@GoodsCode varchar(10) = '0011'
As
Select * From Master_Goods Where GoodsCode = @GoodsCode
Set @GoodsCode2 = '0005'
Go 调用方法:
Declare @VV2 varchar(10)
Exec yangyang8848.OneGoods @Code out 注意:如果存储过程的两个参数一个有默认值一个没有,那么我们要把有默认值得放在后边,不然会出问题哦~~ 细心的朋友,可能看到上边的语句有一些不同,比如,存储过程用的是output,而调用语句用的是out。我要告诉您,两者是一样的。 [RECOMPILE]:指示数据库引擎 不缓存该过程的计划,该过程在运行时编译。如果指定了 FOR REPLICATION,则不能使用此选项。对于 CLR 存储过程,不能指定 RECOMPILE。 这个说一个非常好用的函数 OBJECT_ID :返回架构范围内对象的数据库对象标识号。 例如:我们创建存储过程时,可以如下写代码 If Object_ID('yangyang8848.OneGoods') Is Not Null
Drop Proc yangyang8848.OneGoods
Go Create Proc yangyang8848.OneGoods
@GoodsCode2 varchar(10) out,@GoodsCode varchar(10) = '0011'
As
Select * From Master_Goods Where GoodsCode = @GoodsCode
Set @GoodsCode2 = '0005'
Go 针对于上边的这个存储过程,我们调用以下SQL查询 Select definition From sys.sql_moles
Where object_id = Object_ID('yangyang8848.OneGoods'); 我们是可以查到结果的。 可是如果我们对该存储过程加入[ ENCRYPTION ] 那么你将无法看到任何结果 If Object_ID('yangyang8848.OneGoods') Is Not Null
Drop Proc yangyang8848.OneGoods
Go Create Proc yangyang8848.OneGoods
@GoodsCode2 varchar(10) out,@GoodsCode varchar(10) = '0011' With Encryption
As
Select * From Master_Goods Where GoodsCode = @GoodsCode
Set @GoodsCode2 = '0005'
Go</SPAN> 然后我们查询 sys.sql_moles 目录视图,将返回给你Null。</p> 然后我们执行以下SQL: Exec sp_helptext 'yangyang8848.OneGoods' 你将得到以下结果:The text for object 'yangyang8848.OneGoods' is encrypted. 说到这里你应该明白了,参数[ ENCRYPTION ]:是一种加密的功能, 将 CREATE PROCEDURE 语句的原始文本转换为模糊格式。模糊代码的输出在 SQL Server 2005 的任何目录视图中都不能直接显示。对系统表或数据库文件没有访问权限的用户不能检索模糊文本。但是,可通过 DAC 端口访问系统表的特权用户或直接访问数据库文件的特权用户可使用此文本。此外,能够向服务器进程附加调试器的用户可在运行时从内存中检索已解密的过程。 前两天写了一篇关于游标的介绍文章 ,下边写一个例子,将游标与存储过程一起使用上: If Object_ID('dbo.GetMasterGoods') Is Not Null
Drop Proc dbo.GetMasterGoods
Go Create Proc GetMasterGoods
@MyCursor Cursor Varying Output
With Encryption
As
Set @MyCursor = Cursor
For
Select GoodsCode,GoodsName From Master_Goods
Open @MyCursor
Go --下边建立另外一个存储过程,用于遍历游标输出结果 Create Proc GetAllGoodsIDAndName
As Declare @GoodsCode varchar(18)
Declare @GoodsName nvarchar(20)
Declare @MasterGoodsCursor Cursor
Exec GetMasterGoods @MasterGoodsCursor out
Fetch Next From @MasterGoodsCursor
InTo @GoodsCode,@GoodsName
While(@@Fetch_Status = 0)
Begin
Begin
Print @GoodsCode + ':' + @GoodsName
End
Fetch Next From @MasterGoodsCursor
InTo @GoodsCode,@GoodsName
End
Close @MasterGoodsCursor
Deallocate @MasterGoodsCursor
Go 最后执行Exec GetAllGoodsIDAndName结果为以下内容 0003:品0003
0004:品0004
0005:123123
0006:品0006
0007:品0007
0008:品0008
0009:品0009
0010:品0010
0011:品0011
0012:品0012
0013:品0013
0014:品0014
‘玖’ SQL 视图能否执行存储过程及视图是否能定义变量Declare @Date Datetime
视图和存储过程是两种不同的执行,视图不能执行存储过程,由于不能执行存储过程自然也就不能定义变量Declare @Date Datetime
‘拾’ SQL Server 2000支持5种类型的存储过程
1.系统存储过程 2.本地存储过程指在用户数据拆漏塌库旅圆中创建的存储过程搜兆。
3.临时存储过程 4.远程存储过程 5.扩展存储过程