初学者关于过程和函数的问题

yjjpan 2005-08-04 10:26:45
问题1:自定义函数中是否可以写insert,update,delete语句
问题2:自定义过程中如何调用自定义函数和过程
最好给个例子

送分,请各位指点

...全文
87 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjjpan 2005-08-05
  • 打赏
  • 举报
回复
谢谢,各位,已给分
yjjpan 2005-08-04
  • 打赏
  • 举报
回复
函数内部的表变量是什么意思,能具体点吗?
vivianfdlpw 2005-08-04
  • 打赏
  • 举报
回复
insert,update,delete语句只能操作函数内部的表变量
yjjpan 2005-08-04
  • 打赏
  • 举报
回复
上面的问题找到了,谢谢大家
CREATE FUNCTION getTime
(@CurrentDate varchar(30))
RETURNS varchar(30)
AS
BEGIN
declare
@date varchar(30)
set @date='aa'
insert into test_aa values('127','11')
return @date
END
这个函数编译提示错误:在函数内不正确地使用了 'INSERT'。
请各位指点,谢谢
yjjpan 2005-08-04
  • 打赏
  • 举报
回复
--过程1
CREATE procedure test_pro1
@a1 varchar(20),
@a2 int output
as
insert into test_bb values('124',98,96)
select @a2=count(*) from test_aa a,test_bb b where a.studentid=b.studentid
GO

--在这个过程中调用过程1
CREATE procedure test_pro2
@studentid varchar(20),
@CountNum int output
as
declare @aa int
declare @bb varchar(20)
--select @CountNum=count(*) from test_aa where studentid=@studentid
exec test_pro1(@bb,@aa)
GO

在编译test_pro2这个过程的时候提示:第 9 行: '@bb' 附近有语法错误。
我觉得应该是调用过程的方法不对,请各位指点(前提是test_pro1执行时没有问题的)
ghostzxp 2005-08-04
  • 打赏
  • 举报
回复
--函数中可以写以上语句但受
--函数自身的限制,不能使用动态sql
--下面是个例子

--例如,select top 10 title from article where class=1 order by id desc
--可以在函数中实现
create function f_str()
returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r=''
select top 10 @r=@r+rtrim(title)
from article
where class=1
order by id desc
return(@r)
end
go

--调用
select dbo.f_str()


---下面是分页存储过程的例子
--邹建 2004.05--*/
create procedure p_splitpage
@sql nvarchar(4000),--要执行的sql语句
@currentpage int=2, --要显示的页码
@pagesize int=10,--每页的大小
@pagecount int=0 out--总页数
as
set nocount on
declare @p1 int

exec sp_cursoropen @p1 output,@sql,@scrollopt=1,@ccopt=1,@rowcount=@pagecount output

select @pagecount=ceiling(1.0*@pagecount/@pagesize)
,@currentpage=(@currentpage-1)*@pagesize+1
select @currentpage
exec sp_cursorfetch @p1,16,@currentpage,@pagesize
exec sp_cursorclose @p1
go

--调用示例
exec p_splitpage 'select id,name from sysobjects',2
子陌红尘 2005-08-04
  • 打赏
  • 举报
回复
1、insert,update,delete语句只能操作函数内部的表变量

2、
--创建用户定义函数
create function f_Char2Binary(@str varchar(8000))
returns varchar(8000)
AS
BEGIN
DECLARE @r varbinary(8000),@i int,@j int
select @r=cast(@str as varbinary(8000)),@i=datalength(@r),@str=''
while @i>0
begin
select @j=substring(@r,@i,1),
@str=substring('0123456789ABCDEF',@j/16+1,1)
+substring('0123456789ABCDEF',@j%16+1,1)
+@str,
@i=@i-1
end
return(@str)
end

GO


--创建调用用户定义函数的存储过程
create procedure sp_test
as
select dbo.f_Char2Binary('asdfasfasf')
GO

--执行存储过程
exec sp_test
vivianfdlpw 2005-08-04
  • 打赏
  • 举报
回复
联机手册里很详细:)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧